高分请教***如何调用dll??

hundlom 2004-10-28 12:07:52
有一个readkey_dll.dll文件,接口是这样:
INT ReadKey(CHAR *SET,CHAR *RDATA,INT CMD)
请分别用显式调用和隐式调用两种方法来调用
...全文
223 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddgfei 2004-10-29
  • 打赏
  • 举报
回复
up
hundlom 2004-10-29
  • 打赏
  • 举报
回复
我用typedef定义了啊,是不是用其他语言写的dll文件在没有lib的情况下用显式调用?如果有lib文件最好用隐式??或者谁能把这再总结以下...
oyljerry 2004-10-29
  • 打赏
  • 举报
回复
用typedef定义函数指针
hundlom 2004-10-29
  • 打赏
  • 举报
回复

jazy():这个没问题,我用工具查找过了,并且有说明文档。
oyljerry(☆勇敢的心☆-要开始写论文了): 跟踪测试,dll文件加载成功。
edrftgyh(老胡) :“(FARPROC&)”是那里定义的?( WINAPI*pRead)这个要和dll里的定义对应,但我们看不到dll是如何定义输出的呀。虽然说用WINAPI通用性好,但这个有可能是其他语言写的dll呀。
////////////////
谢谢以上各位兄弟的热心帮助,
但我的问题还是没解决,----显式调用为什么不成功?
lhrmylove 2004-10-29
  • 打赏
  • 举报
回复
up up u pup
linxy2002 2004-10-29
  • 打赏
  • 举报
回复
他们已经说的很清楚了啊,如果调用还出错了,那可能是你的DLL写的有问题,用depends看一下啊
hundlom 2004-10-28
  • 打赏
  • 举报
回复
char *RDATA = new char[300];
typedef int( *pRead)(char*, char*, int);
HINSTANCE hDll=NULL;
pRead tRead=NULL; //定义新的函数名称
HINSTANCE hinstDll=GetModuleHandle("readkey_dll.dll");
if(hinstDll==NULL)
{
hDll=LoadLibrary("readkey_dll.dll");
}
tRead=(pRead)::GetProcAddress(hDll,"Readkey");
*************************************************
那我这样写又有什么错呢?
----答案这样写运行不通,不知道为什么。
kugou123 2004-10-28
  • 打赏
  • 举报
回复
同意1楼。
调用的时候,注意把dll拷贝到你的编译目录下,如果你用debug,就拷贝到debug目录,如果你用release,就拷贝到release目录。
Micro_Sheng 2004-10-28
  • 打赏
  • 举报
回复
对于显式调用时,对hDLL进行判断一下更好

楼猪,Good Luck!
hundlom 2004-10-28
  • 打赏
  • 举报
回复
谢谢,光临显式调用我测试了,失败,为什么?
Micro_Sheng 2004-10-28
  • 打赏
  • 举报
回复
/************************显式*************************/
typedef INT(*pReadKey) (CHAR *SET, CHAR *RDATA, INT CMD);
HINSTANCE hDLL;
pReadKey ReadKey;
HDLL = LoadLibrary("readkey_dll.dll"); //加载动态链接库readkey_dll.dll文件;
ReadKey = (pReadKey)GetProcAddress(hDLL, "ReadKey");

//此处就可以调用ReadKey了

FreeLibrary(hDLL); //卸载readkey_dll.dll文件;


/************************隐式*************************/
#pragma comment(lib, "readkey_dll.dll")
extern "C" INT PASCAL EXPORT ReadKey(CHAR *SET,CHAR *RDATA,INT CMD);
sinall 2004-10-28
  • 打赏
  • 举报
回复
大家都说完了。。。o 0
edrftgyh 2004-10-28
  • 打赏
  • 举报
回复
int( WINAPI*pRead)(char*, char*, int);
HINSTANCE hDll=NULL;
hDll=LoadLibrary("readkey_dll.dll");
if(hDll)
{
(FARPROC&)pRead = GetProcAddress(hDll,"Readkey");
if(pRead)
{
//调用即可
}
}
另外要注意dll的路径是否正确,还有def文件要记得导出!
oyljerry 2004-10-28
  • 打赏
  • 举报
回复
看你的函数是否加载成功了
hundlom 2004-10-28
  • 打赏
  • 举报
回复
隐式链接可以,但不知道为什么?
oyljerry 2004-10-28
  • 打赏
  • 举报
回复
隐式链接是否可以
jazy 2004-10-28
  • 打赏
  • 举报
回复
用depends查看真正的函数名是不是被加了修饰,导致"Readkey"这个名字找不到?
oyljerry 2004-10-28
  • 打赏
  • 举报
回复
LoadLibrary("readkey_dll.dll");

15,471

社区成员

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

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