描述:
使用ATL写一个COM DLL,其中有一个事件接口方法:
dispinterface _IBoxEvents
{
[id(3), helpstring("分钟数据查询")] HRESULT OnQueryMinData([in]int iPort,[in]int cKeyIndex);
};
采用VB做客户程序,VB自动生成的事件响应函数为一个Sub(好象应该为一个副Function):
Private Sub BoxEvents_OnQueryMinData(ByVal iPort As Long, ByVal cKeyIndex As Long,)
End Sub
通过在COM DLL中检查,调用VB事件接收函数后的返回值为0(S_OK),我如何在Private Sub BoxEvents_OnQueryMinData中返回其他的HRESULT值来表示一个错误,我尝试将Private Sub改为Private Function,但VB不允许。
解决方案1:
COM DLL得到的HResult是VB运行时库返回的,所以只能返回VB运行时错误,如果要返回自定义错误,可以更改事件接口函数:
HRESULT OnQueryMinData([in]int iPort,[in]int cKeyIndex,[out,retval]int iReturn);
对应的VB函数:
Function int BoxEvents_OnQueryMinData(ByVal iPort As Long, ByVal cKeyIndex As Long)
也可以像上边说的在VB函数中Err.Raise,但COM DLL中要在VB回调函数调用S_OK后,使用GetErrorInfo函数检查和清除自定义异常,否则,VB主调用函数将得到这个异常。
Err.Raise 就可以了.