高手请看:delphi调用VC的dll的问题?你所没遇到过的事情。

时间:2022-02-26 21:25:37
1)单位以前同事的DLL文件:DT.dll是用VC编译的,一直在使用,没问题。

2)同事的笔记本调用该DLL文件,成功!
   dllHandle := LoadLibarary('DT.dll');
   if dllHandle <> 0 then
     showmessage('成功');

3) 我的笔记本用同样的语句,则无法调用。 dllHandle 的值是 0;

4)我用Delphi自己编写了一个DLL文件:testdll.dll。用我自己的笔记本调用成功!

我的分析:
首先我可以调用自己编写的testdll.dll,应该说明我的语句没有问题。
同事笔记本安装了VC,我的笔记本里面没有。

我认为问题应该出在了编译环境上面,但不知道如何解决!!!

另外说明:
同事传给我一个VC运行库文件:vcredist_x86.exe,我已经安装,问题没有解决。
我之后安装了VS2005,问题还是没有解决。

我的机器就是无法调用DT.dll,真是气死人了!

我要是重新安装系统可以解决这个问题吗?

8 个解决方案

#1


说的简单点:

Delphi能LoadLibaray用Delphi编译的DLL文件,不能Load用VC编译的Dll文件。

怎么办?

#2


出现这种事也够神的了, 你已经检查了dllHandle = 0 ,没有代码我只能说可以从下面几点入手查, 总比我在这里猜的好.

1. 没有DT.dll的代码, 请检查dll写的代码在加载时有什么特殊代码, 尤其是DLL_PROCESS_ATTACH的时候
2. 是否跟系统用户权限有关, 请再仔细检查DLL的路径是否正确.
3. 请使用GetLastError来检查Windows反馈加载DLL出错的原因.

#3


可以通过Delphi带的工具TDump.exe查看该DLL的导入函数,也可以通过VC的工具Dumpbin.exe查看该DLLr导入函数。然后看看缺哪些DLL。

如果有安装VC6,或者windows SDK的话,可以通过depend.exe这个工具直接看出来缺少什么DLL。

#4


引用 3 楼 unsigned 的回复:
可以通过Delphi带的工具TDump.exe查看该DLL的导入函数,也可以通过VC的工具Dumpbin.exe查看该DLLr导入函数。然后看看缺哪些DLL。

如果有安装VC6,或者windows SDK的话,可以通过depend.exe这个工具直接看出来缺少什么DLL。

ding

#5


可以通过Delphi带的工具TDump.exe查看该DLL的导入函数,也可以通过VC的工具Dumpbin.exe查看该DLLr导入函数。然后看看缺哪些DLL。

三楼的方法是对的。

#6


你带着完整的路径再次调用一下那个dll试试看。
另外,dll中的导出函数是区分大小写的,呵呵。

#7


GetLastError函数要来干嘛用的,摆设啊!

#8


根据楼主所言,应该是环境的问题,同事包含了TD。DLL所需要的环境,而你的机器不具备此环境,导致调用失败。

#1


说的简单点:

Delphi能LoadLibaray用Delphi编译的DLL文件,不能Load用VC编译的Dll文件。

怎么办?

#2


出现这种事也够神的了, 你已经检查了dllHandle = 0 ,没有代码我只能说可以从下面几点入手查, 总比我在这里猜的好.

1. 没有DT.dll的代码, 请检查dll写的代码在加载时有什么特殊代码, 尤其是DLL_PROCESS_ATTACH的时候
2. 是否跟系统用户权限有关, 请再仔细检查DLL的路径是否正确.
3. 请使用GetLastError来检查Windows反馈加载DLL出错的原因.

#3


可以通过Delphi带的工具TDump.exe查看该DLL的导入函数,也可以通过VC的工具Dumpbin.exe查看该DLLr导入函数。然后看看缺哪些DLL。

如果有安装VC6,或者windows SDK的话,可以通过depend.exe这个工具直接看出来缺少什么DLL。

#4


引用 3 楼 unsigned 的回复:
可以通过Delphi带的工具TDump.exe查看该DLL的导入函数,也可以通过VC的工具Dumpbin.exe查看该DLLr导入函数。然后看看缺哪些DLL。

如果有安装VC6,或者windows SDK的话,可以通过depend.exe这个工具直接看出来缺少什么DLL。

ding

#5


可以通过Delphi带的工具TDump.exe查看该DLL的导入函数,也可以通过VC的工具Dumpbin.exe查看该DLLr导入函数。然后看看缺哪些DLL。

三楼的方法是对的。

#6


你带着完整的路径再次调用一下那个dll试试看。
另外,dll中的导出函数是区分大小写的,呵呵。

#7


GetLastError函数要来干嘛用的,摆设啊!

#8


根据楼主所言,应该是环境的问题,同事包含了TD。DLL所需要的环境,而你的机器不具备此环境,导致调用失败。