+ -
当前位置:首页 → 问答吧 → 调用C++ dll问题,在线求助!

调用C++ dll问题,在线求助!

时间:2011-09-02

来源:互联网

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;


-------------------------------------------------------

作者: proponent_hc   发布时间: 2011-09-02

加了一句 Copymemory(@TempData,@ATemplet,512);
导致ATemplet向后面的代码传递时就不对.请问是什么原因啊?

作者: proponent_hc   发布时间: 2011-09-02

unsigned char*
对应的是pByte
先改改看吧还有你是d7以下版本吧

作者: ljmanage   发布时间: 2011-09-02

还有你的[0..512] ,这是513字节,c++是512,你应该定义为
[0..511]

作者: bdmh   发布时间: 2011-09-02

非常感谢两位参于 ljmanage bdmh
回复:ljmanage 是用的delphi7.0
补充一下我的代码
---------------------
Delphi(Pascal) code


var ATemplet,BTemplet:Pbyte;
    TempData:array[0..511]  of byte;
    Str:string;
begin

    GetMem(ATemplet,511;
    //获取ATemplet
    Getinfo(hHandle,ATemplet);
    //以下两句代码出现问题
    Copymemory(@TempData,@ATemplet,511);
    BTemplet=pbyte(@TempData); 
    -----执行到这里 BTemplet 可能与ATemplet 不相等了.
    Upinfo(hHandle,BTemplet);
    .....
end;

作者: proponent_hc   发布时间: 2011-09-02

热门下载

更多