ary*_*rya 3 c c++ static-libraries windows-forms-designer visual-studio
我使用 VS 创建了一个静态“C”库。
我正在为另一个 VS 控制台 C 应用程序使用相同的库文件,它工作正常,但是当我使用 Windows 窗体应用程序时,它无法正常工作。
在这个论坛中提到了很多问题,但没有得到帮助。
是否有任何命名约定可以从 Windows 窗体 Managed c++ 调用静态库函数?
得到这样的错误
错误 LNK2028:未解析的令牌 (0A000032)“enum STATUS __clrcall xyz(unsigned char)”(?xyz@@$$FYM?AW4STATUS@@E@Z) 在函数 __catch$?button3_Click@Form1@Myapp@@$$FA 中引用$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z$0
但是我应该为控制台和 Windows 应用程序使用相同的静态库。
链接器错误消息强烈暗示出了什么问题。请注意__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 声明。
| 归档时间: | 
 | 
| 查看次数: | 1337 次 | 
| 最近记录: |