1、今天用ATL处理skyline的事件照着skyline官方的列子敲代码竟然出错了,具体为DispEventAdvise后m_pITerraExplorer5就变成0xcccc了,跟好好几次都是这样。最好才发现是处理事件的函数调用方式忘了加了...要加__stdcall 才行
2、dispid
SINK_ENTRY_EX(/*nID =*/ 0, DIID__ITerraExplorerEvents5 ,/*dispid =*/ 1, OnGisLoadFinish)
dispid 这个是具体某个事件在列表中的顺序:
代码
HRESULT _ITerraExplorerEvents5::OnLoadFinished
HRESULT _ITerraExplorerEvents5::OnFileClosing
HRESULT _ITerraExplorerEvents5::OnFrame
HRESULT _ITerraExplorerEvents5::OnTerraExplorerMessage
HRESULT _ITerraExplorerEvents5::OnObjectAction
HRESULT _ITerraExplorerEvents5::OnFileSave
HRESULT _ITerraExplorerEvents5::OnRenderQualityChanged
HRESULT _ITerraExplorerEvents5::OnInputModeChanged
HRESULT _ITerraExplorerEvents5::OnLButtonDown
比如:OnLoadFinished 是第一个id就是1
OnLButtonDown id是9
3、import的时候不要按官方推荐的直接引用路径,换个机器很麻烦
#import "C:\Program Files (x86)\Skyline\TerraExplorer Pro\TerraExplorerX.dll" no_namespace,named_guids用下面这个就行了
#import "libid:b87695b0-65ad-11d5-85c1-0001023952c1" no_namespace,named_guids

浙公网安备 33010602011771号