当前位置:主页>仓库管理软件> 列表

调用c写的dll后,出现回调函数错误.兄弟们帮忙啊 找免费库存软件

财务软件版1楼: -----------C中dll头文件
bool WINAPI AddExistComPort(BYTE byComPort = 1,
DWORD dwBaudRate = 9600,
BYTE byParity = 0,
BYTE byStopBits = 1,
BYTE byByteSize = 8,
LPONDEBUGRCV lpDebugRcv = NULL,
LPONRESPANDMORCV lpMoOrRespRcv = NULL,
unsigned int uMsgFormat = 0);

#define DEBUGPARA char szComPort[7],char szDebugMsg[1024]
#define RCVMOANDRESTPARA char szComPort[7],char szATCmdForRcvOrResp[1024]

typedef int (*LPONDEBUGRCV)(const char * szComPort,const char * szDebugMsg);
typedef int (*LPONRESPANDMORCV)(const char * szComPort,const char* szATCmdForRcvOrResp);

---------我在delpih中调用程序

type
rszATCmdForRcvOrResp = array[0..1024]of char;

TszComPort = array[0..7]of char;
TszDebugMsg = array[0..1024]of char;
TLPONDEBUGRCV = function(szComPort : TszComPort ;szDebugMsg : TszDebugMsg):integer;stdcall;
TLPONRESPANDMORCV = function(szComPort : TszComPort ; szATCmdForRcvOrResp : rszATCmdForRcvOrResp):integer;stdcall;
function AddExistComPort(byComPort:Cardinal; //端口号
dwBaudRate: Cardinal;//频率
byParity:Cardinal;
byStopBits:Cardinal;
bybyteSize:Cardinal;
lpDebugRcv:TLPONDEBUGRCV;//回调函数,调试信息
lpMoOrRespRcv:TLPONRESPANDMORCV;//接收以及回应回调函数
uMsgFormat:Cardinal
):boolean; stdcall;

function lpDebugRcv(szComPort : TszComPort ;szDebugMsg : TszDebugMsg):integer;stdcall;
function lpMoOrRespRcv(szComPort : TszComPort ; szATCmdForRcvOrResp : rszATCmdForRcvOrResp):integer;stdcall;
implementation
//打开串口
function AddExistComPort ; external ATComDllLIB name ''AddExistComPort'';
function lpDebugRcv(szComPort : TszComPort ;szDebugMsg : TszDebugMsg):integer;stdcall;
begin
form1.Memo1.Lines.Add(szComPort);
result := 1;
end;

function lpMoOrRespRcv(szComPort : TszComPort ; szATCmdForRcvOrResp : rszATCmdForRcvOrResp):integer;stdcall;

begin
form1.Memo1.Lines.Add(szComPort);
result := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
AddExistComPort(1,9600,0,1,8,lpDebugRcv,lpMoOrRespRcv,0);
end;

end.


在调用dll中函数的时候没有出现问题.而回调函数的时候,报内存错误.请兄弟给给意见,谢谢

2楼: 回调函数没看到那里说是stdcall的,你换成cdecl的看看,再就是你把
回调函数里form1.Memo1.Lines.Add(szComPort);这行注视掉看看 如免费库存软件

3楼: to tseug:刚试过了,不行.


现在不知道怎么搞的, 又可以进回调函数了.但是回调函数执行结束,仍然报内存错误。
而且现在是彻底猜不到哪里有问题.兄弟们帮忙看看啊

4楼: 这个
rszATCmdForRcvOrResp = array[0..1024]of char;
TszComPort = array[0..7]of char;
TszDebugMsg = array[0..1024]of char;
是不是应该
rszATCmdForRcvOrResp = array[0..1023]of char;
TszComPort = array[0..6]of char;
TszDebugMsg = array[0..1023]of char;

还有
TLPONDEBUGRCV = function(szComPort : TszComPort ;szDebugMsg : TszDebugMsg):integer;stdcall;


TLPONRESPANDMORCV = function(szComPort : TszComPort ; szATCmdForRcvOrResp : rszATCmdForRcvOrResp):integer;stdcall;

改成
TLPONDEBUGRCV = function(szComPort : PChar ;szDebugMsg : PChar):integer;stdcall;
TLPONRESPANDMORCV = function(szComPort : PChar; szATCmdForRcvOrResp : PChar):integer;stdcall;

5楼: 原来是dll写错了.不过还是非常感谢tseug. 如果大家没有问题,今天下班我就结帖了

6楼: 接受答案了.