描述:
void CDispSimple::StarDlg(VARIANT* Win)
{
// TODO: Add your dispatch handler code here
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CWnd* pWin=reinterpret_cast<CWnd*>(Win);
Dnp3Mstcfg dlg(pWin);
dlg.DoModal();
}
CWnd* pwin=AfxGetApp()->m_pMainWnd;
// TODO: Add extra validation here
::CoInitialize( NULL ); // COM 初始化
CLSID clsid; // 通过 ProgID 取得组件的 CLSID
HRESULT hr = ::CLSIDFromProgID( L"DnpOpc.DispSimple", &clsid );
ASSERT( SUCCEEDED( hr ) ); // 如果失败,说明没有注册组件
CComPtr < IUnknown > spUnk; // 由CLSID启动组件,并得到 IUnknown 指针
hr = ::CoCreateInstance( clsid, NULL, CLSCTX_ALL, IID_IUnknown, (LPVOID *)&spUnk );
ASSERT( SUCCEEDED( hr ) ); // 如果失败,说明没有初始化 COM
CComDispatchDriver spDisp( spUnk ); // 构造智能指针
CComVariant v1(1), v2(2), vResult; // 参数
hr = spDisp.Invoke1( // 调用2个参数的函数
L"StarDlg", // 函数名是 Add
(VARIANT*)pwin, //&v1,// 第一个参数,值为整数1
//&v2, // 第二个参数,值为整数2
&vResult); // 返回值
ASSERT( SUCCEEDED( hr ) );
???为何出现错误,并没有启动对话框