描述:
我有一个ActiveX 组件,内有
[ uuid(C009BC30-BB91-4D53-AEFD-DE712F9E4F9C),
helpstring("ODMA_AppInterface Control 的调度接口")]
dispinterface _DODMA_AppInterface
{
properties:
methods:
[id(DISPID_ABOUTBOX)] void AboutBox();
[id(DISPID_FILEOPEN)] BSTR FileOpen();
[id(DISPID_FILESAVE)] void FileSave( BSTR SaveFileName );
[id(DISPID_FILESAVEAS)] void FileSaveAs( BSTR SaveAsFileName );
};
几个接口, 我想在Atl中使用,请问如调用这些接口呢???
我在机于对话框模式中写的一个测试. 代码如下:
{
::CoInitialize(NULL);
// Create an instance of the Word application and obtain the
// pointer to the application's IDispatch interface.
CLSID clsid;
CLSIDFromProgID(L"ODMA_SYS.AppInterfacCtrl.1", &clsid);
IUnknown* pUnk;
HRESULT hr ;
hr= ::CoCreateInstance( clsid, NULL, CLSCTX_SERVER,
IID_IUnknown, (void**) &pUnk);
if( FAILED( hr) ) MessageBox( "asfd11111");
IDispatch* pDispApp;
hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDispApp);
if( FAILED( hr) ) MessageBox( "asfd222");
// Get IDispatch* for the Documents collection object
wchar_t* szFunction = OLESTR("AboutBox");
DISPID dispid_Docs;
hr = pDispApp->GetIDsOfNames ( IID_NULL, &szFunction , 1,
GetUserDefaultLCID(), &dispid_Docs );
if( FAILED( hr) ) MessageBox( "asfd33333333");
DISPPARAMS dpNoArgs = {
NULL,
NULL,
0,
0
};
VARIANT vResult;
hr = pDispApp->Invoke ( dispid_Docs, IID_NULL,
GetUserDefaultLCID(), DISPATCH_METHOD,
&dpNoArgs, NULL, NULL, NULL);
if( FAILED( hr) )
MessageBox( "asfd444444"); // 被执行.
CoUinitialize();
}
动行后会执行, "asfd444444"
兄弟帮我看看吧..... 在线等...
您可能想查找下面的文章:
- 实现了IDispatch接口的组件和ActiveX控件用起来有什么不同呢?我觉得一样可以用在Web页面上,为什么ActiveX控件还要多实现那么多各种各样
- 实现了IDispatch接口的组建,用vbscript怎么调用?
- MSFlexGrid有一个Picture属性,是一个IDispatch接口指针,请问如何操作?
- 怎样查询ActiveX控件的IDispatch接口每个ID代表函数
- MFC实现IDispatch接口问题?
- 如何hook住com接口的idispatch接口的虚函数invoke?
- IDispatch双接口,自动化,是一样的东西吗
- 如果一个组件实现IDispatch接口,那么能否是一个"自描述"的组件?
- C++SDK怎么使用IDispatch接口实现函数管理
- mfcdriller示例程序中,派生的IDispatch接口方法GetIDsOfNames的参数cNames是指什么?