社区
进程/线程/DLL
帖子详情
DLL导出函数的奇怪问题。。。。。。。。?
tomqyp
2004-04-17 12:04:57
最近用 MFC向导创建了一个MFC共享DLL,使用DEF文件导出函数,函数可以正常被显式调用,却不能隐式调用,在隐式调用链接时显视error LNK2019
于是我在调用函数的头文件中尝试使用_declsped(dllimport)、WINAPI以及其它关键字,但是都不能成功编译链接,请教高手这里为什么,及解决方法
...全文
106
14
打赏
收藏
DLL导出函数的奇怪问题。。。。。。。。?
最近用 MFC向导创建了一个MFC共享DLL,使用DEF文件导出函数,函数可以正常被显式调用,却不能隐式调用,在隐式调用链接时显视error LNK2019 于是我在调用函数的头文件中尝试使用_declsped(dllimport)、WINAPI以及其它关键字,但是都不能成功编译链接,请教高手这里为什么,及解决方法
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
楼上说的是一个错误,另外,我认为只能导出类或者全局函数,不能导出成员函数
PE
导出
表查看器(易语言版本)-易语言
最右边是PEID解析的,可以发现PEID解析
导出
表时只能正常解析以符号名
导出
的
函数
,一旦遇到以序号
导出
的
函数
就会导致错位,图中user32.
dll
导出
的前两个
函数
是以序号0x5DC和0x5DD
导出
的并没有
导出
函数
名,而PEID不能...
net
dll
文件
不要被
奇怪
的提交吓到了,这个仓库是另一个项目的试验场。 如何拍摄要求? request(char* method, char* hostent, char* content)行为与您期望的request(char* method, char* hostent, char* content) : method是...
cs2dluawrap:CS2D Lua包装器
Lua 5.1.4包装器,它调用未
导出
的CS2D的Lua 5.1.4
函数
。 允许Lua模块与CS2D兼容,而不会出现
奇怪
的(内存)错误! 这可以使服务器脚本编写者受益于使用外部Lua C模块。 这个东西只在服务器端运行!!! 参见 用法...
asp.net知识库
Oracle中PL/SQL单行
函数
和组
函数
详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步...
从
DLL
中
导出
函数
...
导出
表包含
DLL
导出
到其他可执行文件的每个
函数
的名称。 这些
函数
是
DLL
中的入口点;只有
导出
表中的
函数
可由其他可执行文件访问。
DLL
中的任何其他
函数
都是
DLL
私有的。 通过使用带
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章