delphi引用链接库————————————————————————————————
function GetPlateInfo(dIP,rst:Pchar):Boolean;cdecl;External 'LPRTCPTest.dll';
var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
rstbool:Boolean;
rst:Pchar;
IP:string;
pIP:Pchar;
buff:Pchar;
begin
buff:=stralloc(256);
IP:='192.168.1.100';
pIP:=PChar(IP);
rst:=TestC(pIP);
rstbool:=GetPlateInfo(pIP,buff);
Edit2.Text:= buff;
end;
————————————————————————————————————————
dll中方法
————————————————————————————————————————
extern"C" _declspec(dllexport) bool GetPlateInfo(char* dftip, char* rst)
{
SOCKET client;
client = connetServer("192.168.1.100", 8131, TCP_BLOCK); char buff2[] = "{\n"
"\"plateInfo\":\"京AF0236\",\n"
"\"color\":\"yellow\",\n"
"\"timestamp\":\"2019-07-26 14:00:00\",\n"
"\"camera_state\":1,\n"
"}";
strcpy(rst, buff2);
return true;
}
————————————————————————————————————————
connectserver方法
————————————————————————————————————————
SOCKET connetServer(char *ip, int port, int block)
{
SOCKET client;
struct sockaddr_in addr;
unsigned long ip_addr = inet_addr(ip); if (INADDR_NONE == ip_addr)
{
printf("input right ip,eg:192.168.1.22\n");
return INVALID_SOCKET;
}
if(initializeWinsockIfNecessary() == 0)
{
printf("WSAStartup error!/n");
return INVALID_SOCKET;
}
client=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET == client)
{
printf("create socket error/n");
releaseWinsockIfNecessary();
return INVALID_SOCKET;
} if (block == TCP_UNBLOCK)
{
makeSocketNonBlocking(client);
}
else
{
makeSocketBlocking(client);
} addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr= ip_addr;
if(connect(client,(struct sockaddr *)&addr,sizeof(addr))!=0)
{
printf("connect error/n");
closeSocket(client);
releaseWinsockIfNecessary();
return INVALID_SOCKET;
}
return client;
}
——————————————————————————————————————————
function GetPlateInfo(dIP,rst:Pchar):Boolean;cdecl;External 'LPRTCPTest.dll';
var
Form1: TForm1;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
rstbool:Boolean;
rst:Pchar;
IP:string;
pIP:Pchar;
buff:Pchar;
begin
buff:=stralloc(256);
IP:='192.168.1.100';
pIP:=PChar(IP);
rst:=TestC(pIP);
rstbool:=GetPlateInfo(pIP,buff);
Edit2.Text:= buff;
end;
————————————————————————————————————————
dll中方法
————————————————————————————————————————
extern"C" _declspec(dllexport) bool GetPlateInfo(char* dftip, char* rst)
{
SOCKET client;
client = connetServer("192.168.1.100", 8131, TCP_BLOCK); char buff2[] = "{\n"
"\"plateInfo\":\"京AF0236\",\n"
"\"color\":\"yellow\",\n"
"\"timestamp\":\"2019-07-26 14:00:00\",\n"
"\"camera_state\":1,\n"
"}";
strcpy(rst, buff2);
return true;
}
————————————————————————————————————————
connectserver方法
————————————————————————————————————————
SOCKET connetServer(char *ip, int port, int block)
{
SOCKET client;
struct sockaddr_in addr;
unsigned long ip_addr = inet_addr(ip); if (INADDR_NONE == ip_addr)
{
printf("input right ip,eg:192.168.1.22\n");
return INVALID_SOCKET;
}
if(initializeWinsockIfNecessary() == 0)
{
printf("WSAStartup error!/n");
return INVALID_SOCKET;
}
client=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET == client)
{
printf("create socket error/n");
releaseWinsockIfNecessary();
return INVALID_SOCKET;
} if (block == TCP_UNBLOCK)
{
makeSocketNonBlocking(client);
}
else
{
makeSocketBlocking(client);
} addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr= ip_addr;
if(connect(client,(struct sockaddr *)&addr,sizeof(addr))!=0)
{
printf("connect error/n");
closeSocket(client);
releaseWinsockIfNecessary();
return INVALID_SOCKET;
}
return client;
}
——————————————————————————————————————————
procedure TForm1.Button1Click(Sender: TObject);
var
rstbool:Boolean;
rst:Pchar;
IP:string;
pIP:Pchar;
buff:Pchar;
begin
New(buff);
New(pIP);
IP:='192.168.1.100';
pIP:=PChar(IP);
rstbool:=GetPlateInfo(pIP,buff);
Edit2.Text:= buff;
Dispose(buff);
Dispose(pIP);
end;