int _stdcall EstablishConnect(char * IP_Address,int IP_Port,int TimeOut,unsigned int *Sock)
int _stdcall SMT_Read_Id_MacNo(unsigned int Sock,unsigned char id[5])
int _stdcall SMT_Read_Id_MacNo(unsigned int Sock,unsigned char id[5])
int * = ^Integer;最好做一个PInteger = ^Integer;
int * = PInteger
int _stdcall SMT_Read_Id_MacNo(unsigned int Sock,unsigned char id[5])
function EstablishConnect(IP_Address: PAnsiChar; IP_Port: Integer; TimeOut: Integer; var Sock: LongWord): Integer; stdcall;
function SMT_Read_Id_MacNo(Sock: LongWord;id: array[0..4] of Byte): Integer; stdcall;
Type
TId=Array[0..4] of char;function SMT_Read_Id_MacNo(Sock: LongWrod; id: TId): Integer;
或
function SMT_Read_Id_MacNo(Sock: LongWrod; id: PChar): Integer;(这种好像不大严格)最后别忘了加stdcall; external 'XXXX.dll';
function EstablishConnect(IP_Address:pchar;IP_Port:Integer;TimeOut:Integer;Sock:pCardinal):Integer;stdcall;function SMT_Read_Id_MacNo(Sock:Cardinal;output:array of byte):Integer;stdcall;procedure TForm1.Button1Click(Sender: TObject);
var
nResult: Integer;
sock:PCardinal;
szid : array[0..4] of byte;
szIp : string;
begin
szIp:='10.23.5.152';
nResult := EstablishConnect(PChar(szIp),10001,1000,Sock);
case nResult of
0: begin
hSock := sock^;
bOpen := True;
end;
-7:showmessage('Timeout');
-13: ShowMessage('Ip Error');
-14: ShowMessage('socket init error');
end; if bOpen then
begin
nResult:=SMT_Read_Id_MacNo(hSock,szId);//********
case nResult of
0: ;//ShowMessage(szid[0]);
$07: ShowMessage('length error');
$0b:ShowMessage('ime1 # error');
-6: showmessage('no response');
end;
end;
end;//********这部分老是返回失败的,我怀疑是返回的SOCK不对.再次谢谢大家.
procedure TForm1.Button1Click(Sender: TObject);
var
nResult: Integer;
sock:Cardinal;
szid : array[0..4] of byte;
szIp : string;
begin
szIp:='10.23.5.152';
nResult := EstablishConnect(PChar(szIp),10001,1000,@Sock);
function SMT_Read_Id_MacNo(Sock: Cardinal; id: PAnsiChar): Integer;
Delphi不支持直接用固定数组做参数的语法
function SMT_Read_Id_MacNo(Sock: LongWord; const id): Integer; stdcall;
我赞同,但是我一直有个疑问,就是c里边额unsigned int 在Delphi里能用Longword表示吗?不会出现不兼容吗?