C++ 强制为Visual Studio C++;静态库

C++ 强制为Visual Studio C++;静态库,c++,visual-studio,visual-c++,C++,Visual Studio,Visual C++,在一个“纯”C.C文件的项目中,我很难链接由几个cpp文件组成的静态库。.c文件正在查找语法为_functionme的函数对象,如下所示: logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders EXPORTS getEventLogProviders=getEventLogProviders @4 Dump of file M:\...\screenshot.lib File

在一个“纯”C.C文件的项目中,我很难链接由几个cpp文件组成的静态库。.c文件正在查找语法为_functionme的函数对象,如下所示:

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders
EXPORTS
 getEventLogProviders=getEventLogProviders @4
Dump of file M:\...\screenshot.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _ReflectiveLoader@4
getEventLogProviders=_getEventLogProviders@4
但是.lib文件将其导出如下: 文件M的转储:…\Release\recvevent.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  ?_getEventLogProviders@@YAIPAPAD@Z (unsigned int __cdecl _getE
ventLogProviders(char * *))

  Summary

          C3 .debug$S
          14 .idata$2
          14 .idata$3
           4 .idata$4
           4 .idata$5
           C .idata$6
我的exports.def文件如下所示:

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders
EXPORTS
 getEventLogProviders=getEventLogProviders @4
Dump of file M:\...\screenshot.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _ReflectiveLoader@4
getEventLogProviders=_getEventLogProviders@4
项目可以成功链接的库,导出如下函数:

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders
EXPORTS
 getEventLogProviders=getEventLogProviders @4
Dump of file M:\...\screenshot.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _ReflectiveLoader@4
getEventLogProviders=_getEventLogProviders@4

我做错了什么?

装饰在导出函数的开头添加下划线,并在结尾添加带数字的@。因此,您的
.def
文件应如下所示:

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders
EXPORTS
 getEventLogProviders=getEventLogProviders @4
Dump of file M:\...\screenshot.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _ReflectiveLoader@4
getEventLogProviders=_getEventLogProviders@4

现在,
.def
没有任何效果,因为损坏的函数写得不正确。

几乎就在那里,现在dumpbin给了我:“getEventLogProviders”作为函数名,而linked仍在搜索“\u getEventLogProviders”。行起作用:“\u getEventLogProviders”=_getEventLogProviders@4“这是另一个错误。使用导出的程序未使用正确的调用约定。它使用u cdecl而不是u stdcall。这将在运行时导致堆栈失衡,很难诊断。这不是另一个bug。这是同样的错误。@4是stdcall的名称,.def文件是关闭编译器的强制转换。