另外做一个简单的console应用程序,main所在的文件名是cpp,并包含了dll工程产生的lib,调用dll里的函数时报告错误
error LNK2001: unresolved external symbol "int __cdecl QInitLink(struct __QLINK *)" (?QInitLink@@YAHPAU__QLINK@@@Z)
Debug/test.exe : fatal error LNK1120: 2 unresolved externals
如果将main所在的文件扩展名改成.c,则可以编译通过,将dll所有的文件改成cpp也可以。
怎么做才能解决问题,将c文件(不改动扩展名)封装成c++能用的dll呢
3 个解决方案
#1
改头文件:
#ifdef __cplusplus
extern "C"
#endif
int func1();
#ifdef __cplusplus
extern "C"
#endif
int func2();
#ifdef __cplusplus
extern "C"
#endif
int func1();
#ifdef __cplusplus
extern "C"
#endif
int func2();
#2
或者:
#ifdef __cplusplus
extern "C" {
#endif
void func1();
void func2();
....
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C" {
#endif
void func1();
void func2();
....
#ifdef __cplusplus
}
#endif
#3
你的def文件写对了吗?可能是楼上说的问题,函数输出原型不匹配,或调用规则不同......
你看看dll的输出函数是什么样子?
happy day!
你看看dll的输出函数是什么样子?
happy day!
#1
改头文件:
#ifdef __cplusplus
extern "C"
#endif
int func1();
#ifdef __cplusplus
extern "C"
#endif
int func2();
#ifdef __cplusplus
extern "C"
#endif
int func1();
#ifdef __cplusplus
extern "C"
#endif
int func2();
#2
或者:
#ifdef __cplusplus
extern "C" {
#endif
void func1();
void func2();
....
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C" {
#endif
void func1();
void func2();
....
#ifdef __cplusplus
}
#endif
#3
你的def文件写对了吗?可能是楼上说的问题,函数输出原型不匹配,或调用规则不同......
你看看dll的输出函数是什么样子?
happy day!
你看看dll的输出函数是什么样子?
happy day!