DLL函数未导出:无法找到名为TestFunc的入口点

时间:2009-04-27 11:39:59

标签: c windows winapi

我正忙着了解一点C / C ++,并与C#互操作。我已经检查了几个创建一个简单的Win32 DLL并使用它来自C#的例子,但是当我尝试调用我的DLL时,我得到了运行时错误:“无法找到名为TestFunc的入口点”。我的DLL看起来像这样,我用Win32 DLL项目创建它,使用空项目选项:

部首:

__declspec(dllexport) int TestFunc(char *, char *, char *);

代码文件:

#include "stdafx.h"
#include "TestLib.h"

__declspec(dllexport) int TestFunc(char *arg1, char *arg2, char *arg3) 
{
  char str1[] = "Brady Kelly";
  char str2[] = "Hello World";
  char str3[] = "1234567890";

  strcpy(arg1, str1);

  return 128;   
}

我做错了什么?

3 个答案:

答案 0 :(得分:6)

您的函数是使用C或C ++绑定编译的吗?你没有指定,但它看起来像你有可能使用C ++编译器 - 编译器使用与C编译器非常不同的名称修改,你将无法简单地找到名称“TestFunc”好像您正在使用C编译器或使用C名称修改规则。

要简单地告诉C ++编译器使用C名称修改规则,请在头文件中使用它:

extern "C"
{
  __declspec(dllexport) int TestFunc(char *, char *, char *);
}

答案 1 :(得分:2)

此外,您只需要在函数声明(在头文件中)前面的declspec,而不是定义。用于检查从DLL导出的内容以及DLL所依赖的内容的有用工具是Dependency Walker

答案 2 :(得分:2)

实际上,由于您已将此问题标记为C,我建议对1800 INFORMATION的解决方案进行一些细微更改:

#ifdef __cplusplus
extern "C" {
#endif

#ifdef EXPORT_MODE
#define METHODTYPE __declspec(dllexport)
#else 
#define METHODTYPE __declspec(dllimport)
#endif

#ifdef __cplusplus
}
#endif

/*! _The_ method */
METHODTYPE int TestFunc(char *, char *, char *);

这将允许您在客户端代码和代码中使用相同的标头。

NB: Dependency Walker不再与VS2008捆绑在一起。如果您使用的是VS2008,则必须下载它。