Я очень плохо знаком с взаимодействием, и у меня возникают проблемы с определением импорта dll из DLL C ++.Документация для DLL выглядит следующим образом:
bool __stdcall __declspec(dllexport) InitHW(char *name, char *model, int& type)
Итак, код, который я пробовал, выглядит следующим образом, и он дает исключение system.AccessViolation:
[DllImport("extIO_IC7610.dll", CallingConvention = CallingConvention.Cdecl)]
public unsafe static extern bool InitHW(string name, string model, int type);
private unsafe void Initialize()
{
try
{
bool result;
string name = "Test";
string model = "Model";
int type = 3;
result = InitHW(name, model, type);
}
catch (Exception ex)
{
}
}
Я только что понял, что это предполагаетсявернуть данные.Может кто-нибудь показать мне ошибки в моем понимании здесь?Спасибо, Том
На основании комментариев я изменил вещи, чтобы они выглядели так:
[DllImport("extIO_IC7610.dll", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public unsafe static extern bool InitHW(string name, string model, ref int type);
unsafe private void Initialize())
{
try
{
bool result;
string name = "";
string model = "";
int type = 3;
result = InitHW(name, model, ref type);
}
catch (Exception ex)
{
}
}
Это все еще не работает.Теперь я получаю сообщение об ошибке, что стек не сбалансирован из-за несоответствия подписей.Я думаю, что строки сделаны правильно, но параметр & int все еще может быть проблемой.Том