BCB如何调用16位DLL 在线等待

SayFun 2002-06-04 10:06:21
例如有16位DLL函数原型 INT FAR PASCAL _SETADDR(INT port_no,INT addr,LPSTR buffer);
用BCB6。0调用却总不成功。
。。。
。。。
INT SETADDR(INT port_no,INT addr,LPSTR buffer)
{
_asm{
push buffer
call SMapLS_IP_EBP_8
push eax
push port_no
push addr

mov edx,globalProcPointer
call QT_Thunk
call SUnMapLS_IP_EBP_8
pop ecx
}
//return _AX;
}
。。。。


调用
。。。。
(FARPROC)LoadLibrary16=GetProcAddress32( "KERNEL32", 35); //取得所需函数
FARPROC)FreeLibrary16=GetProcAddress32("KERNEL32", 36);
(FARPROC)GetProcAddress16=GetProcAddress32("KERNEL32", 37);
(FARPROC)SMapLS_IP_EBP_8=GetProcAddress(GetModuleHandle("KERNEL32"),"SMapLS_IP_EBP_8");
(FARPROC)SUnMapLS_IP_EBP_8=GetProcAddress(GetModuleHandle("KERNEL32"),"SUnMapLS_IP_EBP_8");

dll16=LoadLibrary16("Access.dll"); //载入16动态连接库
globalProcPointer=(DWORD)GetProcAddress16(dll16,"_SETADDR");

i=SETADDR(1,1,"6228202485"); //调用


请各位不吝赐教

...全文
28 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SayFun 2002-06-05
  • 打赏
  • 举报
回复
我知道这个函数的调用是成功的,但是我要传变量时,此函数的执行结果却不对啊。。。。。
请大家多多讨论
jerry921 2002-06-04
  • 打赏
  • 举报
回复
STIOhandle=LoadLibrary("STIOPort.dll");
if(STIOhandle==NULL){
ShowMessage("加载STIOPort.dll失败");
Application->Terminate();
return;
}
inportb=(INPORTB)GetProcAddress(STIOhandle, "inportb");
if(inportb==NULL){
ShowMessage("加载inportb失败");
return;
}
outportb=(OUTPORTB)GetProcAddress(STIOhandle, "outportb");
if(outportb==NULL){
ShowMessage("加载outportb失败");
return;
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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