如何将c文件里的函数封装成dll,并给c++程序调用

时间:2022-09-08 19:52:14
我用vc6做了一个简单的dll工程,将工程里所有的文件(包括DllMain所在的文件)都改成用.c做扩展名,并编写了.def文件。
另外做一个简单的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();

#2


或者:
#ifdef __cplusplus
extern "C" { 
#endif

void func1();
void func2();

....

#ifdef __cplusplus
 }
#endif

#3


你的def文件写对了吗?可能是楼上说的问题,函数输出原型不匹配,或调用规则不同......
你看看dll的输出函数是什么样子?

happy day!

#1


改头文件:
#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

#3


你的def文件写对了吗?可能是楼上说的问题,函数输出原型不匹配,或调用规则不同......
你看看dll的输出函数是什么样子?

happy day!