DLL是用C++编写的 要用DELPHI调用 可是其中的回调函数一直没反应啊#ifndef _FSC_MOTOSRV_H_
#define _FSC_MOTOSRV_H_#ifdef WIN32
 #ifdef MOTO_SRV_EXPORTS
  #define MOTOSRV_API  extern "C" __declspec(dllexport) 
 #else
  #define MOTOSRV_API  __declspec(dllimport) 
 #endif #define _CALL __cdecl
#endif  //WIN32 
typedef int  bool;
typedef void (WINAPI *MOTO_Callback)(char *msg, int msglen);
//注册接到对方数据时的回调函数
MOTOSRV_API void _CALL MOTO_SetCallBackFun(MOTO_Callback cb);以上是DLL的头文件void __stdcall display(char *msg, int len)
{
int i;
for(i =0; i<len; ++i)
{
printf("0x%02x ",msg[i]);
}
printf("\n");
return;
}
int main(int argc, char **argv)
{
//////////////////////// 接收数据 ////////////////////////////
//设置回调函数
MOTO_SetCallBackFun(display); //开始接收数据
MOTO_StartRecv(Port);
}以上是C++调用DLL时候的回调函数部分,运行正常。type
PCALLBACK = procedure(ss:string;n:integer);stdcall;procedure CallBack(ss:string;n:integer);stdcall;procedure MOTO_SetCallBackFun(cbf: PCALLBACK);cdecl; external 'moto_srv.dll';implementationprocedure CallBack(ss:string;n:integer);stdcall;begin
   showmessage('11');
end;procedure TForm1.Sendaaa();
var
callbackFun: PCALLBACK;
begin
    callbackFun:= CallBack;
    MOTO_SetCallBackFun(callbackFun);
    MOTO_StartRecv(4004);end;以上是DELPHI 调用DLL的回调函数部分的代码,可是回调函数完全没反应啊,请问什么地方有问题啊?谢谢!

解决方案 »

  1.   

    。。我看到了string,换成PChar试试
    PCALLBACK = procedure(ss:pchar;n:integer);stdcall;procedure CallBack(ss:pchar;n:integer);stdcall;
      

  2.   

    试试这样
    MOTO_SetCallBackFun(@callbackFun);
      

  3.   

    楼上能说详细点吗?
    C++调用的代码在上面呢,没有问题,DELPHI的该怎么做啊?
      

  4.   


    type
    PCALLBACK = function(msg:Pchar;n:integer):boolean;stdcall;procedure MOTO_SetCallBackFun(cbf: PCALLBACK);cdecl; external 'moto_srv.dll';//function CallBack(msg:Pchar;n:integer):boolean;stdcall;function CallBack(msg:Pchar;n:integer):boolean;stdcall;
    //var
    //i:integer;
    //sss:string;
    ///re2:array of byte;
    begin
       showmessage('11');
       form1.memo1.text:='wert';
       result:=true;
    end;
    function MOTO_SendData(str:Pchar; n:integer):boolean;cdecl;external'moto_srv.dll' ;
    procedure MOTO_SetIDParam(m:integer; n:integer);cdecl;external'moto_srv.dll' ;
    procedure MOTO_SetNetParam(str:string; n:integer);cdecl;external'moto_srv.dll' ;
    function MOTO_StartRecv(n:integer):boolean;cdecl;external'moto_srv.dll' ;
    procedure MOTO_StopRecv();cdecl;external'moto_srv.dll' ;
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i,k:integer;
    aa:array of byte;
    str:string;
    begin   str:='0101DD99004703000011072215293403D5BEB5F7000001000100000000C0EED4CBC7BF0000D2B6CFB2B3AC00000CD5BED5FB393939393939394603443180334603443180334603443180330FE8';
        k:=trunc(length(str)/2);
        setlength(aa,k);
        for i:=0 to k-1 do
        aa[i]:=byte(strtoint('$'+str[2*i+1]+str[2*i+2])) ;
        sendaaa(aa,k);
    end;
    procedure TForm1.Sendaaa(aa:array of byte;n:integer);
    var
    callbackFun: PCALLBACK;
    begin
        callbackFun:= CallBack;
        MOTO_SetNetParam('12.0.0.111',4004);
        MOTO_SendData(@aa,n);
        MOTO_SetCallBackFun(@callbackFun);
        MOTO_StartRecv(4004);
    end;
    求高手帮帮忙啊,为什么我的回调函数里面一直没有反应呢?showmessage('11');没反应啊,C++的程序里面就算 void __stdcall display(char *msg, int len)
    这里的数据类型不对,回调函数收到的数据不正确,但至少还会有反应的,请问我的程序哪出问题了?请高手帮帮忙,谢谢了!
      

  5.   

    哪位大哥能帮帮我 留下邮箱 我把C++的DEMO和DLL发过去
      

  6.   

    你的dll有问题。模块无法加载
      

  7.   

    不是吧,我这C++的DEMO运行完全正确,我自己做的DELPHI程序可以发送数据,但用回调函数接收数据时没反应,应该不会模块无法加载吧
      

  8.   

    可能与连接硬件有关。
    procedure MOTO_SetNetParam(str:string; n:integer);cdecl;external'moto_srv.dll' ;需要修改一下procedure MOTO_SetNetParam(str:PAnsiChar; n:integer);cdecl;external'moto_srv.dll' ;
      

  9.   

    问题终于解决了!原来DEMO里面的DLL和之前他给我的DLL不一样!!!!!!!!
    DEMO是后来我跟他要的,他修改了没告诉我,我傻了吧唧的搞了好几天,终于在上厕所时候来了灵感,把DEMO里的DLL复制到我的程序里,立刻能用了!!!!!!
    我真SB。。