Вам нужно пометить функцию в DLL как экспортированную. Есть два способа сделать это. Вы можете либо создать файл .def
и назвать экспортируемые функции, либо добавить спецификатор __declspec(dllexport)
к сигнатуре функции.
Чтобы создать файл .def
, в Visual Studio с открытым проектом C DLL щелкните правой кнопкой мыши «Исходные файлы», а затем в «Visual C ++» -> «Код» выберите «Файл определения модуля (.def»). )». Во вновь созданном файле .def
вы можете перечислить функции, которые вы хотите экспортировать, например:
LIBRARY mydll
EXPORTS
function1
function2
function3
Затем при сборке DLL доступны function1
, function2
и function3
.
Кроме того, имейте в виду, что если вы вручную не зададите соглашение о вызовах (например, int __stdcall function1(int a, int b);
), соглашение о вызовах будет __cdecl
по умолчанию, и поэтому, когда вы добавляете строку для импорта функции через P / Invoke, вы также должен иметь атрибут CallingConvention = CallingConvention.CDecl
. Несоблюдение соглашений о вызовах приведет к повреждению стека в коде вызова.