c链接时构建错误

时间:2013-03-13 13:40:49

标签: c

使用外部驱动程序时,我遇到了某些程序的问题。

它编译得很好但是当我尝试构建它时,我得到:

error LNK2001: unresolved external symbol "void __stdcall Function1(void (__fastcall*)(int))" (?Function1@@YGXP6IXH@Z@Z)

函数的头定义:

void __stdcall                            Function1(TDeviceCallback callback);

现在是“不寻常的部分” 这个项目是一个dll,就像设备DLL和其他应用程序之间的代理一样。 由于该应用程序能够调用c函数的限制,代理dll必须构建一些特殊选项才能工作:

对象/库

winapims.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib 

项目选项:

winapims.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/test2.pdb" /machine:I386 /out:"Release/test2.fll" /implib:"Release/test2.lib" 

这不是我做的第一个这样的代理,但这是我第一次遇到这样的问题。任何想法可能是什么?

编辑: 问题似乎是代理必须用作fastcall,但链接器在该函数中只有转换问题:(

1 个答案:

答案 0 :(得分:0)

问题似乎是C ++的名字错误。您需要按如下方式导出C函数:在头文件中

#define MYLIB_API __declspec(dllexport)
#ifdef __cplusplus
extern "C" MYLIB_API int fnmylib(void);
#else
MYLIB_API int fnmylib(void);
#endif

在源文件中,将它们定义为

MYLIB_API int fnmylib(void)
{ ... }