如何在Windows窗体应用程序vc ++中导入C静态库

时间:2014-02-19 07:00:08

标签: c++ c visual-studio static-libraries windows-forms-designer

我使用VS创建了一个静态“C”库。

我正在为另一个VS控制台C应用程序使用相同的库文件,它的工作正常,但是当我使用Windows窗体应用程序时,它无法正常工作。

在此论坛中提到了这么多查询但没有得到帮助。

是否有任何命名约定来从Windows窗体托管c ++调用静态库函数?

像这样得到错误

  

错误LNK2028:未解析的令牌(0A000032)“枚举STATUS __clrcall   xyz(unsigned char)“(?xyz @@ $$ FYM?AW4STATUS @@ E @ Z)在   功能   __catch $?button3_Click @ Form1中@ @@ MYAPP $$ FA $ $ AAMXP @ AAVObject系统@@ P $ AAVEventArgs @ @@ 4 Z $ 0

但我应该为控制台和Windows应用程序使用相同的静态库。

1 个答案:

答案 0 :(得分:4)

链接器错误消息强烈暗示它出错了什么。注意未定义符号的__clrcall调用约定,它告诉您编译器认为这些是“CLR”函数。托管代码,当然不是,它们是__cdecl。还有更多,这些名字也被破坏了。请注意名称中的“@@ $$ FYM?AW4STATUS @@ E @ Z”诅咒。这告诉你编译器认为它们是用C ++而不是C语言编写的。

你必须明确告诉编译器这个,.h文件不够兼容。您在C ++ / CLI源代码文件中的确如此:

#pragma managed(push, off)
extern "C" {
#include "yadayada.h"
}
#pragma managed(pop)

#pragmas暂时关闭托管代码编译模式,因此编译器现在假定这些是非托管函数声明。围绕#include的extern“C”{}告诉编译器.h文件包含C声明。