Мне нужно использовать C dll (а не C++) в С#. Я попробовал базовый пример. Но не сработало.
Я использую визуальную студию Microsoft. Я создал новый проект. C++> Win32 Project Затем выбрали dll и пустой проект. В выбранных опциях Компилировать как: "Скомпилировать как код C (/TC)"
#include <stdio.h>
__declspec(dllexport) void HelloFromDLL()
{
printf("DLL Works!\n");
}
__declspec(dllexport) double TestFunc(double a, double b, double c)
{
return (a+b)*c;
}
Файл защиты: Linker> Input> File Defination File
БИБЛИОТЕКА TestLib
ОПИСАНИЕ "Описание"
ЭКСПОРТ
HelloFromDLL @1
TestFunc @2
Когда я использую extern "C", он дает ошибку C2059
Без него: если я использую функцию в коде С#, дающей ошибку. Если не использовать, но с кодовой строкой DllImport, работайте.
[DllImport("TestLib.dll")]
public static extern void HelloFromDLL();
Я пытался с и без файла заголовка. Что я должен делать?
В вашем случае неправильное соглашение о вызове для dll
[DllImport ("TestLib.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void HelloFromDLL();
Соглашения об использовании по умолчанию - stdcall
Вы можете указать WINAPI, PASCAL или __stdcall в своем коде C для прототипов функций или использовать компилятор /Gz вместо компиляции вашей DLL с помощью соглашений о вызовах stdcall
PS Я предполагаю, что ваша dll доступна для вашей программы С#, а BOOL APIENTRY DllMain() включен в код вашей dll