У меня есть внешняя библиотека DLL, написанная в C ++. Я разрабатываю приложение C# .net 8, которое вызывает метод из этой библиотеки и передает два указателя Domdocument30. < /P>
Похоже: < /p>
internal partial class MyClass
{
[LibraryImport("library")]
private static partial short libraryMethod(IntPtr petUnk, IntPtr respUnk);
static void CallAPI(string inXml, ref string outXml, string methodName)
{
Logger.Log("MyClass :: CallAPI");
IntPtr reqPtr = IntPtr.Zero;
IntPtr resPtr = IntPtr.Zero;
int num = 1;
try
{
Logger.Log($"MyClass :: CallAPI => Send to API: {inXml}");
DOMDocument30 reqDoc = new();
DOMDocument30 resDoc = new();
Encoding.Default.GetBytes(inXml);
reqDoc.async = true;
reqDoc.loadXML(inXml);
reqPtr = Marshal.GetIUnknownForObject(reqDoc);
resPtr = Marshal.GetIUnknownForObject(resDoc);
num = libraryMethod(reqPtr, resPtr);
DOMDocument30 finResp = (DOMDocument30)Marshal.GetObjectForIUnknown(resPtr);
Logger.Log($"EPrescription :: CallAPI => Response: {num}");
if (num != 0)
throw new Exception(GetAPIErrorDescription(num));
finResp.preserveWhiteSpace = true;
outXml = finResp.xml;
}
catch (Exception ex)
{
throw new Exception($"MyClass :: CallAPI => NUM: {num}; Error: {ex} ");
}
finally
{
if (reqPtr != IntPtr.Zero) Marshal.Release(reqPtr);
if (resPtr != IntPtr.Zero) Marshal.Release(resPtr);
}
}
}
< /code>
Если я передаю неправильные данные в REQPTR, DLL возвращает ошибку (неверные данные). Но если я все передам правильно, DLL отвечает, что он не может инициализировать com. DLL также использует COM для чтения данных из REQDOC, поэтому, если это так, я не понимаю, почему чтение работает, но написание нет.
Что может быть проблемой? < /P>
Нет необходимости знать, что происходит внутри DLL; Основной вопрос заключается в том, почему чтение работает, но письмо не делает. И это происходит только в .net 8 - потому что, если я сделаю это в .NET Framework, все работает нормально. Я должен использовать этот DLL, это обязательное требование.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ternal-dll
C# .net8 com с внешним DLL ⇐ C++
Программы на C++. Форум разработчиков
1753878012
Anonymous
У меня есть внешняя библиотека DLL, написанная в C ++. Я разрабатываю приложение C# .net 8, которое вызывает метод из этой библиотеки и передает два указателя Domdocument30. < /P>
Похоже: < /p>
internal partial class MyClass
{
[LibraryImport("library")]
private static partial short libraryMethod(IntPtr petUnk, IntPtr respUnk);
static void CallAPI(string inXml, ref string outXml, string methodName)
{
Logger.Log("MyClass :: CallAPI");
IntPtr reqPtr = IntPtr.Zero;
IntPtr resPtr = IntPtr.Zero;
int num = 1;
try
{
Logger.Log($"MyClass :: CallAPI => Send to API: {inXml}");
DOMDocument30 reqDoc = new();
DOMDocument30 resDoc = new();
Encoding.Default.GetBytes(inXml);
reqDoc.async = true;
reqDoc.loadXML(inXml);
reqPtr = Marshal.GetIUnknownForObject(reqDoc);
resPtr = Marshal.GetIUnknownForObject(resDoc);
num = libraryMethod(reqPtr, resPtr);
DOMDocument30 finResp = (DOMDocument30)Marshal.GetObjectForIUnknown(resPtr);
Logger.Log($"EPrescription :: CallAPI => Response: {num}");
if (num != 0)
throw new Exception(GetAPIErrorDescription(num));
finResp.preserveWhiteSpace = true;
outXml = finResp.xml;
}
catch (Exception ex)
{
throw new Exception($"MyClass :: CallAPI => NUM: {num}; Error: {ex} ");
}
finally
{
if (reqPtr != IntPtr.Zero) Marshal.Release(reqPtr);
if (resPtr != IntPtr.Zero) Marshal.Release(resPtr);
}
}
}
< /code>
Если я передаю неправильные данные в REQPTR, DLL возвращает ошибку (неверные данные). Но если я все передам правильно, DLL отвечает, что он не может инициализировать com. DLL также использует COM для чтения данных из REQDOC, поэтому, если это так, я не понимаю, почему чтение работает, но написание нет.
Что может быть проблемой? < /P>
Нет необходимости знать, что происходит внутри DLL; Основной вопрос заключается в том, почему чтение работает, но письмо не делает. И это происходит только в .net 8 - потому что, если я сделаю это в .NET Framework, все работает нормально. Я должен использовать этот DLL, это обязательное требование.
Подробнее здесь: [url]https://stackoverflow.com/questions/79719888/c-sharp-net8-com-with-with-external-dll[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия