У меня есть структура, определенная в C ++, которая содержит массивы int и std :: string, которые являются собственным кодом C ++ (dll). Я использовал следующий метод, чтобы получить его в C #:
public class PInvokeData
{
[StructLayout(LayoutKind.Sequential)]
public struct pinvoke_call
{
//[MarshalAs(UnmanagedType.LPArray,SizeConst=5,SizeParamIndex=0,MarshalType="int")]
[MarshalAs(UnmanagedType.ByValArray, SizeConst=5)]//,SizeParamIndex =0,SafeArraySubType = VarEnum.VT_I4)]
public int[] mynum;
}
[DllImport("DLL_pinvoke_base.dll")]
public extern static pinvoke_call TestPInvoke();
}
код хорошо компилируется.
когда я вызываю этот статический метод и получаю возвращаемое значение структуры из C ++ и присваиваю другому объекту структуры в C # как
input = PInvokeData.TestPInvoke();
я получаю исключение MarshalDirectiveException, которое не было обработано. Подпись типа метода не совместима с PInvoke. Я пытался решить проблему через другие темы форума, но я не получил результат.
структура в коде C ++ такая же, как показано для структуры C #, как
struct pinvoke_call
{
int mynum[5]
};
После вызова функции C ++ она возвращает оттуда эту структурную переменную в C #, которую я хочу сделать маршалом
Спасибо за ответ,
Ashutosh