DLL导出函数的奇怪问题。。。。。。。。?

tomqyp 2004-04-17 12:04:57
最近用 MFC向导创建了一个MFC共享DLL,使用DEF文件导出函数,函数可以正常被显式调用,却不能隐式调用,在隐式调用链接时显视error LNK2019
于是我在调用函数的头文件中尝试使用_declsped(dllimport)、WINAPI以及其它关键字,但是都不能成功编译链接,请教高手这里为什么,及解决方法
...全文
106 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomqyp 2004-04-17
  • 打赏
  • 举报
回复
不好意思 上面忘了说明已经添加lib文件了
bluebohe 2004-04-17
  • 打赏
  • 举报
回复
Alt+F7 Link Object/Library Modules编辑框中添加你所需要的DLL的相应.lib文件(要在能找到的路径下)
薛定谔之死猫 2004-04-17
  • 打赏
  • 举报
回复
关注
vcforever 2004-04-17
  • 打赏
  • 举报
回复
你包含相应的.lib文件了吗?
隐式调用的时候必须包含相应的.h文件和.lib文件!
在你的程序中 加入#pragma comment(lib,"xxx.lib")//注意你的.lib文件的路径

也可以在VC环境中设置
tools->option->Directories中设置要包含的头文件和库文件的路径,然后点OK,重新编译一下程序就可以了!

希望对你有所帮助!
tomqyp 2004-04-17
  • 打赏
  • 举报
回复
忘了给分了
tomqyp 2004-04-17
  • 打赏
  • 举报
回复
谢谢大家的热心帮助 原来是我忽略了this指针 不过还有两点不太明白
首先我也觉得HEX484A48(HJH) 是对的
不过试了试将头文件改成BOOL WINAPI test(LPVOID pClass);并没有通过编译不知道是什么原因。
其次既然显示链接可以成功调用,而且我在VB测试中也成功调用,这证明成员函数是要以导出的,为什么就不能用隐式调用呢。能不能通过修改lib文件进行调用呢?
可惜小弟对lib文件格式不了解,还请高手指点一二。
rivershan 2004-04-17
  • 打赏
  • 举报
回复
////////////////WINDEF.H
typedef int BOOL;

BOOL is a int~
bool is a standard c++ type~
rivershan 2004-04-17
  • 打赏
  • 举报
回复
bool CMydllApp::test()
{
AfxMessageBox("OK");
return true;
}

=============
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------------------
BOOL WINAPI test();
//---------------------------------------------------------------------------------
#ifdef __cplusplus
}
#endif

===================

bool VS BOOL~
HEX484A48 2004-04-17
  • 打赏
  • 举报
回复
Sorry 我刚才犯了一个想当然的错误认为加上一个参数是无法编译通过的 似乎在导出的lib中还加入了类的信息导致无法导入 不过他在实际调用还是按上述过程
HEX484A48 2004-04-17
  • 打赏
  • 举报
回复
类的成员函数是不能单独导出的 你非要导出 到处的函数实际会加上一个参数

sampl: Ctest::Test(void) 实际上是 Test(LPVOID pClass)即编译器 在编译过程中在后面加上一个参数 这个参数就是 pClass 就是 调用事该类生成对象的指针

建议导出整个类 你可以通过认为在后面加上 LPVOID pClass 参数是可以编译通过的lib库只说明在参数的大小 不说明参数的类型 不过即使编译成功 如果你原来的导出函数有参数运行中一定会出错
tomqyp 2004-04-17
  • 打赏
  • 举报
回复
谢谢大家的帮助,不过应该可以排除是lib的原因,我把示例源码放在了个人主页上
麻烦大家能不能帮我看看
http://free.7host02.com/tomqyp/MyProjects.rar
http://free.7host02.com/tomqyp1/MyProjects.rar
http://www.websamba.com/tomqyp/MyProjects.rar
三个地址都是同一个文件 如果下不了就换一个试试
rivershan 2004-04-17
  • 打赏
  • 举报
回复
贴一下代码~或者出错信息~
可能你的lib库位置不对~
itmaster 2004-04-17
  • 打赏
  • 举报
回复
在你的头文件里加上:

#pragma comment(lib,".lib")


确认添加lib时候路径正确吗?
lib文件应该在环境变量设置的路径下

bluebohe 2004-04-17
  • 打赏
  • 举报
回复
楼上说的是一个错误,另外,我认为只能导出类或者全局函数,不能导出成员函数

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧