求助DLL的使用(100分)

  • 主题发起人 主题发起人 seaoy
  • 开始时间 开始时间
S

seaoy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何将以下的语句转成Delphi的格式?
Declare Function FindHardware Lib "abc.dll" (ByRef aAs Byte, ByRef b As Long, ByRef c As Byte) As Byte
 
function FindHardware (var a: Byte;
var b: Long;
var c: Byte): Byte;
stdcall;
external "abc.dll";
 
To:xkliu
为什么调用DLL时总会出现非法操作。如何解决?
 
我记得VB中的Long类型在DELPHI中是对应Integer
 
TO Everybody:
调用DLL时出错。如下
access violation at address 0241c604,read of address 0241c604.
怎么解决?
 
seaoy:什么非法操作? 说一说~
你的dll存在吗?
 
源码拿出来
 
abc.dll当然存在。
错误如下
access violation at address 0241c604,read of address 0241c604.
源码已贴出,请看。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
Function FindHardware(var Bm:byte;var Uip:longint;var Ucp:byte):byte;stdcall far external abc.dll';
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Find:integer;
b:byte;
uip:longint;
Ucp:byte;
begin
Find := FindHardware(b, uip, ucp);
Edit1.Text :=inttostr(Find);
end;

end.
 
是FindHardware的VB实现错误,错误不在Delphi.
 
先问一句,你的操作系统,及 DLL 是否是32位的,如果是16位的,这样不行,得用ASM嵌套
 
TO:qsilence
我的OS是16位,DLL是人家提供的,不清楚。
假如是16位的用ASM嵌套该怎样做?多谢!
 
问题可从两个方面考虑:
1.是否将dll文件拷贝到应用程序的目录中去了.
2.下面这行代码虽然指定了dll的名字,却没有指定函数的名字.
Function FindHardware(var Bm:byte;var Uip:longint;var Ucp:byte):byte;stdcall;
far;
external abc.dll';
应该加上 index 1 或者 name 'FindHardware'
 
TO:wolf1860
这样的做法仍然不行!
各位知道如何解决此问题?多谢提出建议!
 
function FindHardware (var a: Byte;
var b: Long;
var c: Byte): Byte;
stdcall;
external "abc.dll";
不要加 var
 
abc.dll是16位的?我只知道16位dll在32位下调用好麻烦,没做过
 
后退
顶部