Ссылочный строковый параметр пуст? - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу вызвать в C# функцию из неуправляемой библиотеки со следующей подписью:

DLL_EXPORT  int xli_open(char *, int , struct t_info *);

В устаревшем коде на Windows 7 функция искажается как:

[DllImport(DRIVER_FILENAME, EntryPoint = "xli_open", CallingConvention = CallingConvention.Cdecl)]
public static extern int xli_open(string device, int hndl, ref t_info tInfo);

Вкл. Windows 10 Я получаю AccessViolationException для вызова функции и импортирую функцию как:

[DllImport(DRIVER_FILENAME, EntryPoint = "xli_open", CallingConvention = CallingConvention.Cdecl)]
public static extern int xli_open(ref string device, int hndl, ref t_info tInfo);

Я больше не получаю AccessViolationException, но кажется, что функция получает пустую строку. Правильно ли объявлено? И почему работает передача параметра ref (строка не будет передана по ссылке в любом случае?)?

1 Ответ

2 голосов
/ 11 февраля 2020

Если вы передаете текст функции, то значение по умолчанию string является правильным. Вероятно, нарушение доступа вызвано какой-то другой ошибкой. Возможно, определение структуры не соответствует, возможно, соглашение о вызовах неверно. Или, возможно, какая-то другая ошибка, но аргумент string кажется правильным.

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