Все, что мне нужно знать, это как вернуть структуру из PInvoke в C ++, которая имеет следующую структуру. На данный момент я могу иметь дело с тем, что она пустая, и я просто хочу знать, как вернуть структуру при условиях, установленных в коде.
Я пробовал использовать всю структуру, которую мне нужно вернуть, иизолировал каждую часть структуры, чтобы узнать, какая часть вызывает у меня проблему (что станет ясно из представленного кода).
Я пробовал тот же метод, желая вернуть несколько целых чисел в структуре, котораяработает отлично. (Пытался сделать это жирным шрифтом, используя ***, ___)
//.header file
typedef struct { //Defintion of my struct in C++
TCHAR msg[256];
}testTCHAR;
//.cpp file
extern "C" {
__declspec(dllexport) testTCHAR* (_stdcall TestChar(testTCHAR* AR))
{
AR->msg;
return AR;
}
}
В моем C # я называю .dll как:
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void testChar(testTCHAR AR);
[DllImport("C:\\Users\\jch\\source\\repos\\FlatPanelSensor\\x64\\Debug\\VADAV_AcqS.dll", EntryPoint = "TestCallBackChar", CallingConvention = CallingConvention.Cdecl)]
public unsafe static extern testTCHAR TestCallBackChar([MarshalAs(UnmanagedType.FunctionPtr)] testChar call);
//Struct
public struct testTCHAR
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string rMsg; //I assume the error should be fixed here
but to what exactly I don't know.
}
//Defining the callback
testChar tChar =
(test) =>
{
//As far as I'm aware this part can be left blank
as I followed a tutorial online
};
testTCHAR returned = TestCallBackChar(tChar); //This is where the error
happens
Мне просто нужно вернуть структуру, желательносо значением, прикрепленным к нему.
Я получаю ошибку: «Сигнатура типа метода не совместима с PInvoke». Который есть в названии, но я покрываю все основания.
Если вам нужна дополнительная информация об этом, пожалуйста, спросите, и я смогу предоставить.