两种模式, 假设你的COM是test.dll
1. 使用头文件模式
2. 使用智能指针#import "test.dll"创建组件实例一般就是CoCreateInstance( CLSID_XXXX, IID_XXXX, CLCTX_INPROC_SERVER, (void**)&pTest );
具体看你的接口了
1. 使用头文件模式
2. 使用智能指针#import "test.dll"创建组件实例一般就是CoCreateInstance( CLSID_XXXX, IID_XXXX, CLCTX_INPROC_SERVER, (void**)&pTest );
具体看你的接口了
//// This file will be processed by the MIDL tool to
// produce the type library (MyAXDll.tlb) and marshalling code.import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(A17D7023-06B9-4E88-902B-0BA12A4CB5A9),
dual,
helpstring("IComTest Interface"),
pointer_default(unique)
]
interface IComTest : IDispatch
{
[id(1), helpstring("method SetComTest")] HRESULT SetComTest([in]BSTR strOK,[out]BSTR* strBack);
};[
uuid(FF5DD3BF-4B48-4F19-9A0C-5CEEB5B19799),
version(1.0),
helpstring("MyAXDll 1.0 Type Library")
]
library MYAXDLLLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb"); [
uuid(E3161C27-7736-49CD-B0D5-8E4047474206),
helpstring("ComTest Class")
]
coclass ComTest
{
[default] interface IComTest;
};
};
project->add project
首先包含进头文件
一般为:MyAXDll.h和MyAXDll_i.c两个文件
在MyAXDll_i.c文件中定义了一下接口:
IID_IComTest 和 CLSID_ComTest如在MFC中调用,只需用到以下代码就可以了
......
IComTest* pIComTest = 0;
CoInitialize(0);
CoCreateInstance(CLSID_ComTest,0,CLSCTX_ALL,IID_IComTest,(void**)&pIComTest);
//得到IComTest接口的指针后你就可以调用该接口暴露的方法了!
//如调用SetComTest方法:
BSTR bstrIn = SysAllocString(L"Hi,Im Jack,Good Jack");
BSTR bstrOut = 0;
pIComTest->SetComTest(bstrIn, &bstrOut);
//That's Okay :)
CoUninitialize();
......
包含头文件形式.#include <initguid.h>
#include "..\VSSDesign\VSSDesign_i.c" //同目录下组件的源文件
#include "..\VSSDesign\VSSDesign.h" //// For ATL's variant support
#include <atlbase.h>int main(int argc, char* argv[])
{
cout << "Initializing COM" << endl; if ( FAILED( CoInitialize( NULL )))
{
cout << "Unable to initialize COM" << endl;
return -1;
} // Create the math component and return IUnknown
IUnknown* pUnk;
HRESULT hr = CoCreateInstance( CLSID_Design, //组件的CLASSID
NULL,
CLSCTX_SERVER,
IID_IUnknown,
(void**) &pUnk );
if ( FAILED( hr ))
{
cout.setf( ios::hex, ios::basefield );
cout << "Failed to create server instance. HR = " << hr << endl;
CoUninitialize();
return -1;
} cout << "Instance created" << endl;//后面用对象调用方法 CoUninitialize();}