哪位高手帮小弟我看一下VC++转成delphi代码,哪里写的不对呀
谁帮我看一下VC++转成delphi代码,哪里写的不对呀
VC++代码如下:
typedef struct{
BYTE m_bRemoteChannel;
BYTE m_bSendMode;
BYTE m_bRight;
char *m_sIPAddress;
char *m_sUserName;
char *m_sUserPassword;
BOOL m_bUserCheck;
DISPLAY_PARA displaypara;
}CLIENT_CARDINFO, *PCLIENT_CARDINFO;
CPLAYER_API LONG __stdcall MP4_ClientStart_Card(PCLIENT_CARDINFO pClientinfo,long nChannelNum,void(CALLBACK *ReadDataCallBack)(DWORD nPort,UCHAR *pPacketBuffer,DWORD nPacketSize));
void CClientdemoDlg::OnButton1()
{
CLIENT_CARDINFO aa5;
.
.
MP4_ClientStart_Card(&aa5,0,NULL);
.
.
}
VC调用成功的,我写成delphi后调用不成功,大家帮我看看哪里有问题
TCLIENT_CARDINFO=record
m_bRemoteChannel:byte;
m_bSendMode:TConnectMode;
m_bRight:byte;
m_sIPAddress:pchar;
m_sUserName:pchar;
m_sUserPassword:pchar;
m_bUserCheck:boolean;
displaypara:tDISPLAY_PARA;
end;
PCLIENT_CARDINFO=^TCLIENT_CARDINFO;
function MP4_ClientStart_Card(pclientinfo:pclient_cardinfo;nChannelNum:longint;ReadDataCallBack:TReadDataCallBack):longint;stdcall;//这里有问题
begin
Result:=-1;
if Init_HikNet<>1 then
exit;
if not Assigned(VMP4_ClientStart_Card) then
@VMP4_ClientStart_Card:=GetProcAddress(HIKDecodeDLL,'MP4_ClientStart_Card');
if @VMP4_ClientStart_Card<>nil then
Result:=VMP4_ClientStart_Card(pClientinfo,nChannelNum,ReadDataCallBack);
end;
调用不成功的
procedure TForm1.Button1Click(Sender: TObject);
var
aa5:tclient_cardinfo;
begin
.
.
MP4_ClientStart_Card(@aa5,1,null);
.
.
end;
出错信息为
[Error] Unit1.pas(76): Incompatible types: 'Calling conventions differ'
大家帮我看看是什么原因啊,求求高手指点一二了
------解决方案--------------------
MP4_ClientStart_Card(PCLIENT_CARDINFO(@aa5),1,nil);
VC++代码如下:
typedef struct{
BYTE m_bRemoteChannel;
BYTE m_bSendMode;
BYTE m_bRight;
char *m_sIPAddress;
char *m_sUserName;
char *m_sUserPassword;
BOOL m_bUserCheck;
DISPLAY_PARA displaypara;
}CLIENT_CARDINFO, *PCLIENT_CARDINFO;
CPLAYER_API LONG __stdcall MP4_ClientStart_Card(PCLIENT_CARDINFO pClientinfo,long nChannelNum,void(CALLBACK *ReadDataCallBack)(DWORD nPort,UCHAR *pPacketBuffer,DWORD nPacketSize));
void CClientdemoDlg::OnButton1()
{
CLIENT_CARDINFO aa5;
.
.
MP4_ClientStart_Card(&aa5,0,NULL);
.
.
}
VC调用成功的,我写成delphi后调用不成功,大家帮我看看哪里有问题
TCLIENT_CARDINFO=record
m_bRemoteChannel:byte;
m_bSendMode:TConnectMode;
m_bRight:byte;
m_sIPAddress:pchar;
m_sUserName:pchar;
m_sUserPassword:pchar;
m_bUserCheck:boolean;
displaypara:tDISPLAY_PARA;
end;
PCLIENT_CARDINFO=^TCLIENT_CARDINFO;
function MP4_ClientStart_Card(pclientinfo:pclient_cardinfo;nChannelNum:longint;ReadDataCallBack:TReadDataCallBack):longint;stdcall;//这里有问题
begin
Result:=-1;
if Init_HikNet<>1 then
exit;
if not Assigned(VMP4_ClientStart_Card) then
@VMP4_ClientStart_Card:=GetProcAddress(HIKDecodeDLL,'MP4_ClientStart_Card');
if @VMP4_ClientStart_Card<>nil then
Result:=VMP4_ClientStart_Card(pClientinfo,nChannelNum,ReadDataCallBack);
end;
调用不成功的
procedure TForm1.Button1Click(Sender: TObject);
var
aa5:tclient_cardinfo;
begin
.
.
MP4_ClientStart_Card(@aa5,1,null);
.
.
end;
出错信息为
[Error] Unit1.pas(76): Incompatible types: 'Calling conventions differ'
大家帮我看看是什么原因啊,求求高手指点一二了
------解决方案--------------------
MP4_ClientStart_Card(PCLIENT_CARDINFO(@aa5),1,nil);