调用C++ dll有关问题,在线
调用C++ dll问题,在线求助!
function Getinfo(hHandle:LongWord;var ATemplet:pChar):smallint; stdcall; far;external 'AXAPI.dll' name 'Getinfo';
function Upinfo(hHandle:LongWord;var BTemplet:pChar):smallint; stdcall; far;external 'AXAPI.dll' name 'Upinfo';
-------------------------------------------------------
------解决方案--------------------
unsigned char*
对应的是pByte
先改改看吧还有你是d7以下版本吧
------解决方案--------------------
还有你的[0..512] ,这是513字节,c++是512,你应该定义为
[0..511]
------解决方案--------------------
//以下两句代码出现问题
Copymemory(@TempData,ATemplet,511);
------解决方案--------------------
var
TempData:array[0..511] of byte;
Str:string;
begin
Getinfo(hHandle,@TempData[0]);
Upinfo(hHandle,@TempData[0]);
.....
end;
- C/C++ code
#define SIZE (512) unsigned char ATemplet[SIZE]; unsigned char BTemplet[SIZE]; int WINAPI Getinfo(HANDLE hHandle,unsigned char* ATemplet); int WINAPI Upinfo(HANDLE hHandle,unsigned char* BTemplet);
function Getinfo(hHandle:LongWord;var ATemplet:pChar):smallint; stdcall; far;external 'AXAPI.dll' name 'Getinfo';
function Upinfo(hHandle:LongWord;var BTemplet:pChar):smallint; stdcall; far;external 'AXAPI.dll' name 'Upinfo';
- Delphi(Pascal) code
// 这样调用程序可以正常运行. var ATemplet:Pchar; begin GetMem(ATemplet,512); Getinfo(hHandle,ATemplet); Upinfo(hHandle,ATemplet); ..... end; //问题: var ATemplet:Pchar; TempData:array[0..512] of char; Str:string; begin GetMem(ATemplet,512); //获取ATemplet Getinfo(hHandle,ATemplet); Str:=ATemplet;// 这样取不到值. 在 C++ ATemplet存的是512字节,于时我用Copymemory Copymemory(@TempData,@ATemplet,512);//这样可以取到数据.但却导致Upinfo执行失败. //注:屏蔽Copymemory整个代码却是正常运行. Upinfo(hHandle,ATemplet); ..... end;
-------------------------------------------------------
------解决方案--------------------
unsigned char*
对应的是pByte
先改改看吧还有你是d7以下版本吧
------解决方案--------------------
还有你的[0..512] ,这是513字节,c++是512,你应该定义为
[0..511]
------解决方案--------------------
//以下两句代码出现问题
Copymemory(@TempData,ATemplet,511);
------解决方案--------------------
var
TempData:array[0..511] of byte;
Str:string;
begin
Getinfo(hHandle,@TempData[0]);
Upinfo(hHandle,@TempData[0]);
.....
end;