C#访问简单的C dll

时间:2014-09-01 12:34:17

标签: c# c dll

我需要在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();

我尝试使用和不使用头文件。我应该怎么做?

1 个答案:

答案 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代码中