了解COM的兄弟帮忙指点下:
提示dll已注册,在注册表中CLSID下能找到COM组件ID,但是找不到COM类ID。
手工用Regsvr32注册也提示已注册。
例程序代码:
idl文件:
// IWzd.idl : IDL source for the IWzd interface
//
// NOTE: no automation declarations--use MFC's built-in support for that
import "unknwn.idl";
[
object,
uuid(C177116E-9AAA-11D3-805D-000000000000),//[color=#0000FF]注册表找到
[/color] pointer_default(unique)
]
interface IWzd : IUnknown
{
HRESULT Method1([in] long lArg1, [out] long *plArg2);
HRESULT Method2([in] long lArg, [in] unsigned long ulArg);
};
COM组件类文件WzdSrv.cpp:
// {4487D431-A6FF-11D3-A398-00C04F570E2C}
static const IID IID_IWzdSrv ={ 0x4487d431, 0xa6ff, 0x11d3, { 0xa3, 0x98, 0x0, 0xc0, 0x4f, 0x57, 0xe, 0x2c } };
// add this line from idl project (iwzd_i.c)组件ID
const IID IID_IWzd = {0xC177116E,0x9AAA,0x11D3,{0x80,0x5D,0x00,0x00,0x00,0x00,0x00,0x00}};注册表中找到
BEGIN_INTERFACE_MAP(CWzdSrv, CCmdTarget)
INTERFACE_PART(CWzdSrv, IID_IWzdSrv, Dispatch)
INTERFACE_PART(CWzdSrv, IID_IWzd, WzdClass) // add this line
END_INTERFACE_MAP()
// {4487D432-A6FF-11D3-A398-00C04F570E2C}
IMPLEMENT_OLECREATE(CWzdSrv, "Server.WzdSrv", 0x4487d432, 0xa6ff, 0x11d3, 0xa3, 0x98, 0x0, 0xc0, 0x4f, 0x57, 0xe, 0x2c)注册表中找不到
客户端定义组件接口以及组件类ID:
// guids.h : guids used by this project
//
#if !defined guids_h
#define guids_h
const IID CLSID_IWzdSrv = { 0x4487d432, 0xa6ff, 0x11d3, 0xa3, 0x98, 0x0, 0xc0, 0x4f, 0x57, 0xe, 0x2c };color=#0000FF]注册表中找不到
const IID IID_IWzd = {0xC177116E,0x9AAA,0x11D3,{0x80,0x5D,0x00,0x00,0x00,0x00,0x00,0x00}};[/color]
注册表中能找到
#endif
客户端cpp调用:
HRESULT hr=::CoCreateInstance(
CLSID_IWzdSrv, // name of dll to load
NULL, // aggregated COM object (none)
CLSCTX_INPROC_SERVER,// use dll
IID_IWzd, // class to create and object of
(LPVOID*) &iWzd); // returned object pointer
提示错误: