как вызвать функцию C ++ из C# с правильными аргументами - PullRequest
0 голосов
/ 28 мая 2020

Мне нужна помощь, чтобы вызвать функцию C++ из C#.

Моя C++ функция похожа на:

EXPDLLAPI int fn1
(
      unsigned char** pp1,
      unsigned int&   rp1Length,
      unsigned char** pp2,
      unsigned int&   rp2Length
);

C# функция, используемая для вызова этой * Функция 1010 * выглядит следующим образом:

[DllImport("sample.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int fn1([MarshalAs(UnmanagedType.LPArray)]byte[]p1Array, 
[MarshalAs(UnmanagedType.I4)]int p1Length, 
[MarshalAs(UnmanagedType.LPArray)]byte[]p2Array,
[MarshalAs(UnmanagedType.I4)]int p2Length);

Я получаю сообщение об ошибке

Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.

Меня беспокоит, правильно ли определение функции C#? Если определение функции C# неверно, какое определение будет правильным.

Может ли кто-нибудь сообщить мне совместимость типов между C ++ и C#, т.е. я использую правильный тип в C# для вызова моего C ++ функция.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...