C ++ API и PInvoke в C #

Я получил «System.AccessViolationException», когда я пытаюсь вызвать метод из C ++ API. В resultXML_out я получил правильно отформатированный XML с данными, возвращенными как исключенные, но возникает исключение (именно для этого метода) и не может обработать это даже с блоком try catch. Я предполагаю, что должен как-то объявить память для resultXML_out, но я не знаю, как это сделать.

Вот объявление метода C ++ API:

SW_ErrCode  SW_GetMyUserInfo (SW_LoginID lh, SW_XML *resultXML_out)

Декларация SW_XML:

const char * SW_XML

Вот мой код:

 [StructLayout(LayoutKind.Sequential)]
public struct SW_LoginID
{
public int loginId;
}

[StructLayout(LayoutKind.Sequential)]
public struct SW_XML
{
public string xml;
}

[DllImport("sw_api.dll")]
[HandleProcessCorruptedStateExceptionsAttribute]
public static extern SW_ErrCode SW_GetMyUserInfo(SW_LoginID sh, out SW_XML resultXML_out);

И вот вызов этого метода:

    SW_XML resultXML_out = new SW_XML();
resultXML_out.xml = "";
SW_ErrCode d = SW_GetMyUserInfo(login, out resultXML_out);

В API я нашел и такой метод. Но я не знаю, как правильно его использовать (или даже если это необходимо):

char* SW_AllocateString (unsigned size)

Но после того, как я прошел, например, 1000 программа завершает работу даже без исключения … Вот описание этой функции в документации API:

Выделите строку.

Возвращает строку, выделенную API

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]