关于调用DLL的问题(200分)

  • 主题发起人 主题发起人 ntbbc
  • 开始时间 开始时间
N

ntbbc

Unregistered / Unconfirmed
GUEST, unregistred user!
一个动态联接库(wek.dll)提供了一下调用方法:
HRESULT _stdcall Login([in] long Id, [in] BSTR Passwd, [out, retval] long * Value );
请问如何在delphi中调用?
作如下调用时提示无法定位程序输入点lonin于动态联接库wek.dll上,那位高手能解决?200分相送!
unit unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function login(const OperatorId:longint;const OperatorPasswd:string;out i:Iunknown):HRESULT;stdcall;
var
Form1: TForm1;
implementation
function login ;External 'TwPageOp.dll' name 'login';
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
OperatorId:longint;
OperatorPasswd:string;
i:Iunknown;
begin
OperatorId:=90;
OperatorPasswd:='9d';
if login(90,'',Iunknown(i))=s_ok then
begin
Label2.Caption :='ok';
end;
end;
end.
 
这是个Com组件,你应该先导入它的类型库.
 
HRESULT _stdcall Login([in] long Id, [in] BSTR Passwd, [out, retval] long * Value );
function login ;External 'TwPageOp.dll' name 'login';
对照一下,至少要
function login ;External 'TwPageOp.dll' name 'Login';
~
就是说在动态库调用的时候Delphi也是区分大小写的。
 
如果是编译通过而在运行时出现此错误提示,则函数的定义应该没有问题,因为你用的是静态
引入,程序在编译时就要定位引入的函数。这时你就要检查该函数的参数是否正确?如果编译
时出错,那就是定义有问题,你还是要仔细检查,名称的大小写等?
 
ntbbc,
注意:
[red]Delphi是大小写不敏感的,但是Dll对大小写敏感。
“无法定位程序输入点”就是你所调用的函数名称在dll中没找到的意思。[/red]
 
UP
Delphi5开发人员指南-机械工业出版社 中DLL的例子很好,建议好好看看。
 
导入什么类型库,怎么导入?
编译都能通过
把longin 改为Login还是提示无法定位程序输入点lonin于动态联接库


 
后退
顶部