请问是否不能调用在16位程序中使用的DLL?加急!(100分)

  • 主题发起人 主题发起人 jafy
  • 开始时间 开始时间
J

jafy

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个用VB3写的程序,它需要调用一个动态链接库,用vb3编译后可以在WINDOWS9X中正确运行,可现在要把该程序转成VB6或DELPHI6的,我使用了同样的方法如下:
在VB6的声明中写:
Declare Function LoadLibrary Lib "Kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName$) As Integer
取出时用:
gv1 = LoadLibrary(path%+"TIN.DLL")
可GV1总是返回0,导致无法引用成功?请问这是为何?该如何调用这个DLL呢?
很急!十分感谢!!!
 
16位dll可以调用。详细资料你可以参阅《delphi下深入windows核心编程》,那里讲得很详细了。
 
TIN.dll是你说的十六位的DLL吧?
它里面的函数你清楚吗?

个人感觉16位的DLL应该和32位的没有什么特殊区别。正常调用就可以了。
使用动态调用或者静态声明调用都可以。

LoadLibrary是动态调用的函数。你可以试验一下调用别的DLL,看返回值是否也为0?
 
可以用 好像很麻烦
 
to:ypy
请问具体如何实现呢?
 
to:netwatch
我找不到这本书呀,能告诉我具体该如何实现吗?或者哪里有这个电子书下载?谢谢!!
 
下面有介绍
http://www.fecit.com.cn/Pages/Guest.BS.S.asp?PC=5053&CD=8402
 
zhanchee:
再次请教DLL的问题。我手里有一A/D转换卡 有TC、QB的LIB,BC++的DLL。但是,DLL是16位的,我在WIN97上用BC++的程序使用通过,但是在VB5、VB4、WIN98上找不到这个DLL,而我又必须使用这张卡,能帮帮忙吗?我想在WIN95,VB5上试一下,但是又不能冒险(我的电脑有太多不能扔的东东)。在WINDOWS上的SYSTEM.INI文件中注册我的DLL会有效果吗?如能行,望赐教?DLL是在WIN32。BC++下写的,用的是NAME关键字,不是LIBRARY。

回答:

一般的DLL无需在SYSTEM.INI中注册。VB5和VB4 32位版本无法调用16位DLL。有两个办法解决这个问题:
1、如果你的16位DLL是标准的,也就是可以在16位VB4中调用,那么你可以使用VB4的16位版本编写一个VB4的Automation服务器,由这个服务器调用DLL。然后在VB5中调用这个Automation服务器。
2、如果DLL是针对C++设计的,不能使用16位VB4调用,你需要借助thunk技术,这必须借助C++或Delphi实现。可以参考QA000622 "32位程序如何调用16位DLL"。
puxm问:
操作系统: NT workstation 4.0
编程工具: vb6
问题: 本人正在做一个测试程序,需要用一台PC控制一台测试仪器,通过一块HP-IB接口卡来进行控制,该卡支持VB(可能版本较低),并提供了一个16位的DLL文件(非系统提供的库),其所有控制函数均包含在该DLL文件中。我按正常定义后使用,但错误提示为没有找到该DLL文件,而我已经将该DLL文件拷贝至系统目录及当前应用程序目录下,并在库名中添加了该DLL文件的所在路径,不知是不是在32位的操作系统下不能调用16位的DLL文件?如果可以调用,则调用的方法会不会有变动?如果使用一个低版本的VB,是否可以使用该DLL文件?本人现在很着急,希望能尽快答复,谢谢!
答:
你可以使用VB3.0/4.0来调用这个DLL。或采用上面提到的thunk技术
编号:QA000622
建立日期: 1999年3月11日 最后修改日期:1999年3月11日
所属类别:

C/C++ - 其他方面

panzh:
vc++4.2
win95
请问如何通过thunk调用 16-bit DLL?以及如何得到thunk编译器thunk.exe?谢谢!

回答:

在Win95下没有必要使用thunk.exe。你可以在http://www.itecuk.com/delmag找到“Calling 16-bit code from 32-bit in Windows 95”,它介绍了使用QT_Thunk进行这种调用。

 
后退
顶部