#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的头文件
C/C++ code
?1234567891011121314151617181920212223242526 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时候的回调函数部分,运行正常。
Delphi/Pascal code
?12345678910111213141516171819202122232425 typePCALLBACK = procedure(ss:string;n:integer);stdcall; procedure CallBack(ss:string;n:integer);stdcall; procedure MOTO_SetCallBackFun(cbf: PCALLBACK);cdecl; external 'moto_srv.dll'; implementation procedure CallBack(ss:string;n:integer);stdcall; begin showmessage('11'); end; procedure TForm1.Sendaaa(); varcallbackFun: PCALLBACK; begin callbackFun:= CallBack; MOTO_SetCallBackFun(callbackFun); MOTO_StartRecv(4004); end;
以上是DELPHI 调用DLL的回调函数部分的代码,可是回调函数完全没反应啊,请问什么地方有问题啊?谢谢!
。。。。。我看到了string,换成PChar试试
PCALLBACK = procedure(ss:pchar;n:integer);stdcall;
procedure CallBack(ss:pchar;n:integer);stdcall;
试试这样
MOTO_SetCallBackFun(@callbackFun);
可能与连接硬件有关。
procedure MOTO_SetNetParam(str:string; n:integer);cdecl;external'moto_srv.dll' ;
需要修改一下
procedure MOTO_SetNetParam(str:PAnsiChar; n:integer);cdecl;external'moto_srv.dll' ;
问题终于解决了!原来DEMO里面的DLL和之前他给我的DLL不一样!!!!!!!!
DEMO是后来我跟他要的,他修改了没告诉我,我傻了吧唧的搞了好几天,终于在上厕所时候来了灵感,把DEMO里的DLL复制到我的程序里,立刻能用了!!!!!!