做了个C++接口,要求调用Delphi中的回调函数,可是测试过程中出现了如下错误,请大家帮忙!
Project d:\xx\xxx.exe faulted with with message 'access violation at 0x006c9ac read of address of 0x0001081: Process stopped User Step or run to continue!
相关代码如下:
Delphi中定义如下结构:
// 回调函数类型
THDFunction = function(wParam: WPARAM; lParam: LPARAM;
nRequestID: Integer; IsLast: boolean):Integer;stdcall;
{$EXTERNALSYM THDFunction}
THDFunction1 = function(wParam: WPARAM): Integer;stdcall;
{$EXTERNALSYM THDFunction1}
// 以上回调函数的指针
TPHDFunctionPoint = ^THDFunction;
{$EXTERNALSYM TPHDFunctionPoint}
TPHDFunction1Point = ^THDFunction;
{$EXTERNALSYM TPHDFunction1Point} // --回调指针结构类型--
TRCallBacks = Record
// Trader区
pTraderFrontConnect: TPHDFunction1Point; // 主机连接
pTraderFrontDisconnect: TPHDFunction1Point; // 主机断开
pTraderFrontWarring: TPHDFunction1Point;
end;
在VC中,用函数将定义的变量指针传入,然后在函数中调用,代码如下
//定义函数指针
typedef int (* pfn)(WPARAM, LPARAM, int, bool) ;
typedef int (* pfn1)(WPARAM);
//定义函数指针结构
struct CPfnList
{
//Trader区
pfn1 pTraderFrontConnect; // 主机连接
pfn1 pTraderFrontDisconnect; // 主机断开
pfn1 pTraderFrontWarring; // 主机警告
}
CPfnList *callbacklist;// 初始化回调函数指针列表 Init CallBack Point List
EXPORT int TransCBPLP(CPfnList *p)
{
callbacklist = p;
return 0;
}
//当客户端与交易后台通信连接断开时,该方法被调用。
void CTraderSpi::OnFrontDisconnected(int nReason)
{
if (callbacklist->pTraderFrontDisconnect)
callbacklist->pTraderFrontDisconnect(0);
}
这个函数调用出错,不知道为什么
Project d:\xx\xxx.exe faulted with with message 'access violation at 0x006c9ac read of address of 0x0001081: Process stopped User Step or run to continue!
相关代码如下:
Delphi中定义如下结构:
// 回调函数类型
THDFunction = function(wParam: WPARAM; lParam: LPARAM;
nRequestID: Integer; IsLast: boolean):Integer;stdcall;
{$EXTERNALSYM THDFunction}
THDFunction1 = function(wParam: WPARAM): Integer;stdcall;
{$EXTERNALSYM THDFunction1}
// 以上回调函数的指针
TPHDFunctionPoint = ^THDFunction;
{$EXTERNALSYM TPHDFunctionPoint}
TPHDFunction1Point = ^THDFunction;
{$EXTERNALSYM TPHDFunction1Point} // --回调指针结构类型--
TRCallBacks = Record
// Trader区
pTraderFrontConnect: TPHDFunction1Point; // 主机连接
pTraderFrontDisconnect: TPHDFunction1Point; // 主机断开
pTraderFrontWarring: TPHDFunction1Point;
end;
在VC中,用函数将定义的变量指针传入,然后在函数中调用,代码如下
//定义函数指针
typedef int (* pfn)(WPARAM, LPARAM, int, bool) ;
typedef int (* pfn1)(WPARAM);
//定义函数指针结构
struct CPfnList
{
//Trader区
pfn1 pTraderFrontConnect; // 主机连接
pfn1 pTraderFrontDisconnect; // 主机断开
pfn1 pTraderFrontWarring; // 主机警告
}
CPfnList *callbacklist;// 初始化回调函数指针列表 Init CallBack Point List
EXPORT int TransCBPLP(CPfnList *p)
{
callbacklist = p;
return 0;
}
//当客户端与交易后台通信连接断开时,该方法被调用。
void CTraderSpi::OnFrontDisconnected(int nReason)
{
if (callbacklist->pTraderFrontDisconnect)
callbacklist->pTraderFrontDisconnect(0);
}
这个函数调用出错,不知道为什么
typedef int (* pfn1)(WPARAM);调用约定不一致吧,c++默认是__cdcel