高分求助:C++Builder5.0中事件参数定义为[out]参数时为何不起作用?(问题解决再加100)
例子:
类型库中的事件定义:
void OnError([in] int nSessionID, [in] VARIANT * Data, [in] unsigned long nType, [in] long nState, [in] long nErrorCode, [out] int * nTimeOut );
按理在事件处理函数中修改*nTimeOut会把修改后的值传回COM内部,但实际却遇到问题。
如:
事件处理函数为:
void OnHandleError(int nSessionID, VARIANT * Data, unsigned long nType, long nState, long nErrorCode, int * nTimeOut)
{
//显示*nTimeOut值,如果Fire_OnError之前为10,则此处显示正确(对应COM内部实现)
*nTimeOut = 0;//修改*nTimeOut的值,但是在COM内部没有变化。
}
COM内部为:
int nTimeOut;
nTimeOut = 10;
Fire_OnError(GetSessionID(), &aVariant, Type,
nState, nErrorCode, &nTimeOut);
nTimeOut 仍然为10,不是上述事件处理函数中改过的值 0, 所以肯定有问题。我尝试把[OUT]改为[in,out]仍然无效。
但是,通用的定义,如果不是定义成事件,则输出参数可以起作用。
类似定义在Delphi5.0则可以起作用。
怀疑:
1.内部实现时采用指针拷贝
2.marshing和unmarshing出错
请各路高人指点迷津