C# .net8 com с внешним DLLC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C# .net8 com с внешним DLL

Сообщение 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, это обязательное требование.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ternal-dll
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»