Вызов функций уровня члена из библиотеки динамических ссылок с помощью pinvoke в C #? - PullRequest
0 голосов
/ 02 марта 2010

Как мне использовать DLLImport pinvoke для вызова функции, которую я написал в классе в неуправляемой DLL? Это всегда бросает, что точка входа не существует в dll. EX:

class Foo
{
  int __declspec(dllexport) Bar() {return 0;}
};

Бар находится в классе Foo. когда я использую pinvoke как:

[DLLImport("Test.dll")]
public static extern int Bar();

При его использовании я получаю исключение о том, что точка входа не существует в DLL. Можно ли вызывать функции непосредственно из классов?

Ответы [ 3 ]

1 голос
/ 02 марта 2010

Вам нужно будет найти искаженное имя. Вы можете использовать dumpbin / exports, но я не уверен, что соглашение о вызовах будет работать через pinvoke.

1 голос
/ 02 марта 2010

Не легко ...

Чтобы вызвать функцию-член, первым «скрытым» аргументом должен быть указатель на класс C ++, функция-член которого вы вызываете.

И функции C ++ управляются по имени, поэтому вам нужно найти имя по имени, по которому вызывается функция, которую вы вызываете.

Вкратце: для этого проще создать оболочку C ++ / CLI вашего класса C ++.

1 голос
/ 02 марта 2010

Краткий ответ:

нет

Нет

Длинный ответ:

Создаем вызываемый C-экспорт (iow, включая параметр instance).

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