阅读:1953回复:7
dll调用求助!(DLL菜鸟求助)
请问在98下(VC 1.52)如何调用一个已经存在的mymaths.DLL文件中的函数;在2000下(VC 6)如何调用一个已经存在的mymaths.DLL文件中的函数?
而且mymaths.DLL是否需要分别用VC 1.52和VC 6编写,生成两个版本的DLL,用VC6写的,能在98(VC1.52)下用吗? 请指教,或推荐几本有关方面的参考书,因为我对DLL一窍不通。 谢谢! |
|
沙发#
发布于:2003-04-18 11:40
这个问题太基础,难怪没人回答你!
咳咳,看来只有我来帮你了 DLL输出函数的头文件写一个 用LIB.exe(自己查查MSDN看怎么用)生成一个.lib文件 把.h和.lib文件拷到你的工作目录 包含头文件,即可编译 发布时,保证DLL能够存在系统环境变量中的路径里或当前目录里 上面的是静态连接DLL 还有一种动态的,就是调用loadlibrary了,查查例子吧,太多了 |
|
板凳#
发布于: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] |
|
地板#
发布于:2003-04-18 14:20
你不是用VC,怎么又用BC了?
你load的那个legend.dll位置在哪里? 与调用它的程序在同一目录下吗? |
|
地下室#
发布于: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不是空的。 谢谢 |
|
5楼#
发布于:2003-04-18 17:20
我怀疑,是legend.dll调用了某个API,有可能也是loadlibrary,
所以...... 你用softice跟踪一下,看看是不是这样,或者用个反汇编工具看看它里面的字符串以及资源,有没有可疑的,是文件名的 |
|
6楼#
发布于:2003-08-15 16:38
如果有16位和32位的互相调用,需用thunk技术。比较难。
|
|
|
7楼#
发布于:2003-08-18 09:17
如果有16位和32位的互相调用,需用thunk技术。比较难。 right |
|
|