社区
进程/线程/DLL
帖子详情
300分请教高手dll的高级应用问题
xiaosun
2003-04-25 04:45:05
一个程序,可以动态的加载动态连接库,写动态连接库的人可以给你一个文本来描述动态连接库的名 函数原型,注意是文本的,所以你的程序里不知道对方会给你一个什么样的函数、函数有几个参数,要求能够调用他的程序,假设参数是window标志的,没有用户自定义的类型。
我已经实现了一半,就差函数参数的处理了
谢谢
...全文
74
37
打赏
收藏
300分请教高手dll的高级应用问题
一个程序,可以动态的加载动态连接库,写动态连接库的人可以给你一个文本来描述动态连接库的名 函数原型,注意是文本的,所以你的程序里不知道对方会给你一个什么样的函数、函数有几个参数,要求能够调用他的程序,假设参数是window标志的,没有用户自定义的类型。 我已经实现了一半,就差函数参数的处理了 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
37 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
webber84
2003-04-27
打赏
举报
回复
你可以先写一个正常的函数调用,让编译器给你生成汇编代码,看看编译器是怎么把参数压栈的,其实直接把编译器生成的汇编代码拷到你的源程序中就行了。
功名半纸
2003-04-26
打赏
举报
回复
利用C++的类成员函数指针和模版好像有可能做的到!!!!
回去试试!!!!
xiaosun
2003-04-26
打赏
举报
回复
得到的参数总是不太对,
还有,c或者c++有没有这样的功能封装?
xiaosun
2003-04-26
打赏
举报
回复
但是我在传递数组的时候出现了问题
weijiechen
2003-04-26
打赏
举报
回复
up
o_racle
2003-04-26
打赏
举报
回复
我的程序不用有任何变化
-------------------------
有相似之处
webber84
2003-04-26
打赏
举报
回复
把你写的代码贴出来看看吧。
seeQe
2003-04-26
打赏
举报
回复
学习
xiaosun
2003-04-26
打赏
举报
回复
webber84(***闭关修炼中***) :
谢谢你,这不是我遇到的问题,我是想将参数放到数组,然后循环压栈,因为dll的函数中的参数个数可能是不同的类型,所以我要用一个variant 数组来存放收到到参数变量,然后压栈。
不知道你是否明白了我的意思。
webber84
2003-04-26
打赏
举报
回复
不知道你说的是什么问题,我试了一下是可以传数组的。
这个是用来测试的DLL导出函数定义,__cdecl调用方式:
__declspec(dllexport) void print(int* array,int size)
{
for(int i=0;i<size;i++)
cout<<array[i]<<endl;
}
下面是调用代码:
HMODULE hMod=LoadLibrary("dll.dll");
PROC pfn=GetProcAddress(hMod,"print");
int array[5]={1,2,3,4,5};
int ** address=(int**)&array;
__asm
{
push 5;
push address;//注意这里不能直接把数组名压到栈里,不知道你遇到的是不是这个问题
call pfn;
add esp,8; //如果导出函数是__stdcall的,这个就不要了。
}
经测试一切正常。
xiaosun
2003-04-26
打赏
举报
回复
force_eagle(战鹰) :能够再给的具体一点吗
类的成员函数指针我知道 ->*
但是如何用模板来包装?谢谢提供思路
xiaosun
2003-04-25
打赏
举报
回复
希望大家多发表想法,谢谢
webber84
2003-04-25
打赏
举报
回复
有意思,回去做做看。
xiaosun
2003-04-25
打赏
举报
回复
必需动态连接,显式调用
xiaosun
2003-04-25
打赏
举报
回复
不行,我要写的是一个可以动态加载并运行指定dll的程序,但是我事先不知道dll中的函数原型,写dll的人要做的只是用文本将dll中要调用的函数类型告诉我就可以了。而我的程序不用有任何变化
COOL099
2003-04-25
打赏
举报
回复
靜態鏈接不行嗎?
你可以根據DLL文件獲得Lib導入庫
要用到DumpBin.exe /exports xxx.dll>xxx.def
修改為常見的def 文件。
再用lib .exe /def:xxx.def 生成xxx.lib .
接下來就不用說了吧。
everandforever
2003-04-25
打赏
举报
回复
大概是的。
xiaosun
2003-04-25
打赏
举报
回复
噢,我明白了,谢谢你。
对于数组怎么处理,push的时候只写数组的地址(也就是数组名)就可以?
xiaosun
2003-04-25
打赏
举报
回复
everandforever(Forever) :你有msn吗?我们通过msn来交流好吗?谢谢
everandforever
2003-04-25
打赏
举报
回复
CDECL 是由调用者负责清理栈的,所以要最后一句。别的方法,不知道。
加载更多回复(17)
matlab打开用什么程序出错,打开matlab提示
应用
程序错误
如果去
请教
一些「
高手
」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑...答:你好你说的这种情况,一般都是由 系统软件、内存、引起的。 1 电脑不心装上了恶意软件,或上网时产生了恶意...
解决IE
应用
程序错误
问题
解决IE
应用
程序错误
问题
解决" 0X000000该内存不能为read" 的方法 现在有很多人在使用donghai制作的电脑公司ghost版的系统,经常会出现“0X000000该内存不能为read”的对话框,作者在最新发布的5。1版本中提到...
常见电脑疑难问答
在
请教
高手
后,他们让我释放Windows 98系统文件来解决这个
问题
,可是我应该如何释放Windows 98系统文件?答:释放系统文件是一种比较有效的方法,很多朋友在使用系统时遇到的
问题
都需要使用Windows 98安装盘释放CAB...
[《编程
高手
箴言》读后感]
[《编程
高手
箴言》读后感] 毕业也有几年了,也看了和学了不少东西,《编程
高手
箴言》读后感。有时也想写点什么,但总是觉得头绪很多,一直没有动笔。最近翻了翻梁先生的《编程
高手
箴言》,突然想写点什么,权且用...
“0X????????”指令引用的“0x00000000”内存,该内存不能为“read”或“written”
在网上查到的资料,留着备用 使用Windows操作系统的人有时...如果去
请教
一些「
高手
」,得到的回答往往是「Windows就是这样不稳定」之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单
分
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章