代码之家  ›  专栏  ›  技术社区  ›  arya2arya

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

  •  3
  • arya2arya  · 技术社区  · 11 年前

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

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

    在这个论坛中提出了很多问题,但没有得到帮助。

    是否有任何命名约定可以从Windows窗体Managed c++调用静态库函数?

    获取类似错误

    错误LNK2028:未解析的令牌(0A000032)“enum STATUS __clrcall xyz(无符号字符)“(?xyz@@$$FYM?AW4STATUS@@E@Z)在中引用 作用 __抓住美元?button3_Click@Form1@我的应用程序@$$FA$AAMXP$AAVObject@System@@P型$AAVEventArgs@4@@0美元

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

    1 回复  |  直到 11 年前
        1
  •  5
  •   Hans Passant    11 年前

    链接器错误消息给出了它出错的强烈提示。注意 __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的外部“C”{}包装告诉编译器.h文件包含C声明。