在delphi中调用C++的DLL函数,怎么声明啊? ( 积分: 100 )

Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
DLL中的声明是这样的:
WORD _stdcall OpenComm(BYTE byPort, DWORD dwCommBaudRate);

WORD _stdcall ReadNum(int* iCard,BYTE* byCardNum);
我怎样在DELPHI中调用这两个函数啊,各位帮忙啊
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄弟,帮忙啊
 
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
Function OpenComm(byPort : Byte; dwCommBaudRate : DWORD):WORD;stdcall; external '你的DLL文件名'
Function ReadNum(var iCard : Integer; var byCardNum : Byte):WORD;stdcall; external '你的DLL文件名'
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
to:wr960204
这种调用我已经试过,可是调用后,icard,bycardNum都出不来值啊
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
BYTE*好像是字节指针类型的,在delphi中怎样调用啊
 
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
Function ReadNum( iCard : PInteger; byCardNum : PByte):WORD;stdcall; external '你的DLL文件名'
修改成这样看! 调用时: new(iCard ) 和 new(byCardNum) 传进去
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
kk2000:我晚上回去试试,一定要试出来啊
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在没法试,不知道还有没有别的办法
 
Z

ztf86781163

Unregistered / Unconfirmed
GUEST, unregistred user!
Function OpenComm(byPort :BYTE ; dwCommBaudRate :DWORD );stdcall; external '你的DLL文件名'
Function ReadNum(var iCard : PInteger;var byCardNum : PByte):WORD;stdcall; external '你的DLL文件名'
 
B

bbscom

Unregistered / Unconfirmed
GUEST, unregistred user!
function OpenComm(byPort:pChar; dwCommBaudRate:integer):Integer; stdcall; external '你的DLL文件名'
第二个方式相同,你的DLL要和主程序在同一个目录里。
 
K

kk2000

Unregistered / Unconfirmed
GUEST, unregistred user!
Function ReadNum(var iCard : PInteger;var byCardNum : PByte):WORD;stdcall; external '你的DLL文件名'
//既然是个指针还用什么var ??
 

晶晶

Unregistered / Unconfirmed
GUEST, unregistred user!
估计是C++改了名字吧。你用Depends看看导出函数的名字吧^_^
 
M

man8888

Unregistered / Unconfirmed
GUEST, unregistred user!
Form1窗口上放按钮Button1,然后写:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

//定义一个函数指针,通过这个指针调用咱的函数

pOpenComm = function (byPort: BYTE; dwCommBaudRate: DWORD): WORD; stdcall;

pReadNum = function (iCard: PInteger; byCardNum: PBYTE ): WORD; stdcall;


var
Form1: TForm1;
OpenComm: pOpenComm;//定义一个函数指针的变量

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
LibHandle: THandle;
begin
//装入DLL,返回大于零则成功
LibHandle:= LoadLibrary('YourDllName.dll');
if LibHandle > 0 then
begin
//获得进程地址
@OpenComm:= GetProcAddress(LibHandle, 'OpenComm');
//调用DLL
if OpenComm(80, 9600) = 0 then
begin
ShowMessage('函数调用成功!');
end else
ShowMessage('函数调用失败!');
//释放DLL
FreeLibrary(LibHandle);
end else
begin
ShowMessage('Open DLL Failed! :(');
end;
end;

end.
 

加油+加油

Unregistered / Unconfirmed
GUEST, unregistred user!
不会,学习学习
 
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
最终还是要找开发人员啊
 
顶部