我需要在C#中使用C dll(而不是C ++) 我尝试了一个基本的例子。但没有奏效。
我正在使用microsoft visual studio。我创建了一个新项目。 C ++> Win32项目然后选择了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;
}
定义文件:链接器&gt;输入&gt;模块定义文件
LIBRARY TestLib
描述“描述”
EXPORTS
HelloFromDLL @ 1
TestFunc @ 2
当我使用extern“C”时,它会给出错误C2059
没有它:如果我在c#代码中使用函数给出错误。如果不使用,但使用DllImport代码行,正在工作。
[DllImport("TestLib.dll")]
public static extern void HelloFromDLL();
我尝试使用和不使用头文件。我应该怎么做?
答案 0 :(得分:1)
在您的情况下,您的dll调用约定是错误的
[DllImport(“TestLib.dll”,CallingConvention = CallingConvention.Cdecl)] public static extern void HelloFromDLL();
默认调用约定是stdcall
您可以在C代码中为函数原型指定WINAPI,PASCAL或__stdcall 或者使用/ Gz编译器切换来编译带有stdcall调用约定的dll
P.S。我假设你的dll可用于你的c#程序和BOOL APIENTRY DllMain()包含在你的dll代码中