DLL的调用(300分)

  • 主题发起人 主题发起人 LeeChange
  • 开始时间 开始时间
L

LeeChange

Unregistered / Unconfirmed
GUEST, unregistred user!
VC做的DLL,Delphi调用时总报错:XXX.DLL不能启动
参数肯定对(不对时会提示参数不对)
 
换调用方式试一下(stdcall..)
 
Var
LibHandle:HWND;
DllName:Procedure(DllHandle:HWND);Stdcall;

LibHandle:=LoadLibrary('MyDll.dll');
if LibHandle<32 then
begin
MessageBox(Form1.Handle,'Not Found MyDll.dll','Error',0);
Exit;
end;
@DllName:=GetProcAddress(LibHandle,'View');
if @DllName=NIL then
begin
MessageBox(Form1.Handle,'Not Found View in MyDll.dll','Error',0);
FreeLibrary(LibHandle);
Exit;
end;
try
View(Application.Handle);
finally
FreeLibrary(LibHandle);
end;

/**************************
动态调用DLL
implementation
Procedure View(EHandle:HWnd);Stdcall;External 'MyDll.dll';
 
按书上写一个,再把自己的内容换进去,还不行,把你的源code载进来或告诉我!
 
用safecall 试试
 
不能启动?
DLL里是COM还是函数
在LoadLibary时出错?
 
把代码帖出来看看吧
 
在Delphi中调用DLL要求函数的大小写必须一致,比如DLL中的函数
Abcdef,在用Delphi调用时不能写成abcdef或其他的形式,大小写必须一致才行。
另外调用DLL最好用Stdcall的形式.
还有一种可能是你的DLL路径放的不对,系统找不到DLL所以报错。
 
从另一台机器上COPY相关的同版本几个DLL文件过来覆盖吧!或许会成功!
 
搞定了吗?提前
 
stdcall 试试!
 
在Delphi中调用C/C++实现的动态连接库,要保证以下几点:
1. 书写规范,大小写要同C/C++一致(大小写敏感)
2. 引入名称(name)要同C/C++输出一致
3. 调用规范要一致,C/C++的输出默认是'cdecl', Delphi默认是'stdcall'
可以显式的在Delphi将调用规范定义为'cdecl'
 
同意:Victortim
把源码帖出来看看吧
@_@
 
注意delphi 与 c++ 调用 dll 顺序不同
 
主要是调用方式,cdecl和stdcall(标准DLL应该是这个)
此外,32bit的DLL要注意引出的函数(export的)是区分大小写的
不能启动很可能是找不到DLL或DLL中使用到的其他DLL找不到。
可以用VC带的Depend工具查看一下。
 
z_cd兄把这么古老的问题都提到前面来了!:)
不过没有源码,实在很难定位!LeeChange老兄也不知哪里去了!结束吧!
我只要$$$
 
多人接受答案了。
 
后退
顶部