用C#调用正常
[DllImport("plcommpro.dll", EntryPoint = "GetDeviceData")]
public static extern int GetDeviceData(IntPtr h, ref byte buffer, int buffersize, string tablename, string filename, string filter, string options);private void btngetdat_Click(object sender, EventArgs e)
{
int ret = 0;
int BUFFERSIZE = 10 * 1024 * 1024;
byte[] buffer = new byte[BUFFERSIZE];
if (IntPtr.Zero != h)
{
ret = GetDeviceData(h, ref buffer[0],BUFFERSIZE, "user", "*", "", "");
}
else
{
MessageBox.Show("Connect device failed!");
return;
}
}
改Delphi调用出错,求指点
Type TGetDeviceData=function(h:hWnd;var buffer:array of PByte;BufferSize: Longint; TableName,FieldNames,Filter,Options: string):Integer;Stdcall;procedure TfrmMain.dxBarLargeButton2Click(Sender: TObject);
var
buffer :array of PByte;
lBUFFERSIZE: Longint;
ret,lLength,lStrat,lEnd: Integer;
devtablename, str, devdatfilter, options:string;
begin
ret :=0;
lBUFFERSIZE :=10*1024*1024;
SetLength(buffer,lBUFFERSIZE);
ret :=GetDeviceData(h,buffer,lBUFFERSIZE, 'user', '*', '','');
if ret >= 0 then
begin
ShowMessage(IntToStr(ret));
end;
end;
[DllImport("plcommpro.dll", EntryPoint = "GetDeviceData")]
public static extern int GetDeviceData(IntPtr h, ref byte buffer, int buffersize, string tablename, string filename, string filter, string options);private void btngetdat_Click(object sender, EventArgs e)
{
int ret = 0;
int BUFFERSIZE = 10 * 1024 * 1024;
byte[] buffer = new byte[BUFFERSIZE];
if (IntPtr.Zero != h)
{
ret = GetDeviceData(h, ref buffer[0],BUFFERSIZE, "user", "*", "", "");
}
else
{
MessageBox.Show("Connect device failed!");
return;
}
}
改Delphi调用出错,求指点
Type TGetDeviceData=function(h:hWnd;var buffer:array of PByte;BufferSize: Longint; TableName,FieldNames,Filter,Options: string):Integer;Stdcall;procedure TfrmMain.dxBarLargeButton2Click(Sender: TObject);
var
buffer :array of PByte;
lBUFFERSIZE: Longint;
ret,lLength,lStrat,lEnd: Integer;
devtablename, str, devdatfilter, options:string;
begin
ret :=0;
lBUFFERSIZE :=10*1024*1024;
SetLength(buffer,lBUFFERSIZE);
ret :=GetDeviceData(h,buffer,lBUFFERSIZE, 'user', '*', '','');
if ret >= 0 then
begin
ShowMessage(IntToStr(ret));
end;
end;
你这个是字节指针数组,而你c#中是字节数组,这个可不一样 buffer :array of Byte;