chenfresh
驱动牛犊
驱动牛犊
  • 注册日期2002-10-23
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1953回复:7

dll调用求助!(DLL菜鸟求助)

楼主#
更多 发布于:2003-04-11 09:54
请问在98下(VC 1.52)如何调用一个已经存在的mymaths.DLL文件中的函数;在2000下(VC 6)如何调用一个已经存在的mymaths.DLL文件中的函数?
而且mymaths.DLL是否需要分别用VC 1.52和VC 6编写,生成两个版本的DLL,用VC6写的,能在98(VC1.52)下用吗?
请指教,或推荐几本有关方面的参考书,因为我对DLL一窍不通。
谢谢!

villein
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2010-12-05
  • 粉丝2
  • 关注1
  • 积分63分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-18 11:40
这个问题太基础,难怪没人回答你!
咳咳,看来只有我来帮你了

DLL输出函数的头文件写一个
用LIB.exe(自己查查MSDN看怎么用)生成一个.lib文件
把.h和.lib文件拷到你的工作目录
包含头文件,即可编译
发布时,保证DLL能够存在系统环境变量中的路径里或当前目录里

上面的是静态连接DLL
还有一种动态的,就是调用loadlibrary了,查查例子吧,太多了
chenfresh
驱动牛犊
驱动牛犊
  • 注册日期2002-10-23
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-04-18 12:33
我是这么用的
typedef void (*COMPILERTEST)(LPSTR,struct ParamX *);
HINSTANCE ghCompilerDLL=NULL;
COMPILERTEST CompilerTest;
ghCompilerDLL=LoadLibrary(__TEXT(\"Legend.dll\"));
GetLastError();
CompilerTest=(COMPILERTEST)GetProcAddress(ghCompilerDLL,\"CompilerTest\");
GetLastError();
刚开始error code is 126.
然后,我添加了vcl60.bpl, rtl60.bpl和cc32360.dll文件到Windows 2000的SYSTEM32目录下。
但是,现在的情况是,两个error code都是2。
请问是和原因?
多谢关注


[编辑 -  4/18/03 by  chenfresh]
villein
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2010-12-05
  • 粉丝2
  • 关注1
  • 积分63分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-18 14:20
你不是用VC,怎么又用BC了?
你load的那个legend.dll位置在哪里?
与调用它的程序在同一目录下吗?
chenfresh
驱动牛犊
驱动牛犊
  • 注册日期2002-10-23
  • 最后登录2004-06-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-18 14:58
你指的BC,是不是我添加的那些文件?
不知我看的对不对(网上),用VC编译时,有一个关于RUNTIME PACKAGE的选项。最初,我用VC编了一个小程序(DOS),只调用这个legend.dll。运行时,不断出现函数(vcl60.bpl等)找不着的错误,估计与这个选项有关。
我试过将Legend与调用它的函数放在一起,也将它放在过Windows 2000的SYSTEM32下,但结果都一样。
而且有一点,我不明白的是,既然发生ERROR_FILE_NOT_FOUND,为什么HINSTANCE ghCompilerDLL不是空的。
谢谢
villein
驱动牛犊
驱动牛犊
  • 注册日期2002-08-04
  • 最后登录2010-12-05
  • 粉丝2
  • 关注1
  • 积分63分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-18 17:20
我怀疑,是legend.dll调用了某个API,有可能也是loadlibrary,
所以......
你用softice跟踪一下,看看是不是这样,或者用个反汇编工具看看它里面的字符串以及资源,有没有可疑的,是文件名的
hglzw
驱动小牛
驱动小牛
  • 注册日期2001-06-12
  • 最后登录2006-03-03
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-15 16:38
如果有16位和32位的互相调用,需用thunk技术。比较难。
[img]http://www.kinboh.com/images/5130.jpg[/img]
hcheng_qi
驱动老牛
驱动老牛
  • 注册日期2002-11-07
  • 最后登录2006-04-13
  • 粉丝1
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-18 09:17
如果有16位和32位的互相调用,需用thunk技术。比较难。
 


right
| -''/"',___,,--''"`-,_¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ `6_ 6¡¡)¡¡ `-,¡¡(¡¡¡¡),`-.__.`)¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡ /_Y_./',, _¡¡)¡¡`._¡¡`,``-..-'¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡_.'.`='¡¡ _ / / --'_.','¡¡¡¡¡¡¡¡¡¡¡¡ (il)'¡¡¡¡¡¡(li)''¡¡ ((!-'¡¡¡¡ÃÃÃÃ! ±ðÅÜ£¿!
游客

返回顶部