求大侠帮忙
const CLSID CLSID_my = {0xEB6DC847,0xB9E2,0x42B7,{0xB7,0xE2,0xC3,0x59,0x9D,0xDF,0xF0,0xDD}};
const IID IID__my = {0x77819406,0xB86F,0x4E0B,{0xB7,0x57,0x14,0x3A,0x53,0xC3,0xA9,0x70}};hr=CoCreateInstance(CLSID_my,NULL,
CLSCTX_ALL,
IID__my,(void **)&myRef);hr = -2147221164;对应的错误码是 REGDB_E_CLASSNOTREG,怎么会注册失败的?
CLSID在注册表找到了,也用 regsvr32 命令注册成功了,
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EB6DC847-B9E2-42B7-B7E2-C3599DDFF0DD}
Implemented Categories (IID用的是这个下面的值,IID是这个吗?)
InprocServer32
ProgID
Programmable
TypeLib (LIBID用的有什么用啊)
VERSION
const CLSID CLSID_my = {0xEB6DC847,0xB9E2,0x42B7,{0xB7,0xE2,0xC3,0x59,0x9D,0xDF,0xF0,0xDD}};
const IID IID__my = {0x77819406,0xB86F,0x4E0B,{0xB7,0x57,0x14,0x3A,0x53,0xC3,0xA9,0x70}};hr=CoCreateInstance(CLSID_my,NULL,
CLSCTX_ALL,
IID__my,(void **)&myRef);hr = -2147221164;对应的错误码是 REGDB_E_CLASSNOTREG,怎么会注册失败的?
CLSID在注册表找到了,也用 regsvr32 命令注册成功了,
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EB6DC847-B9E2-42B7-B7E2-C3599DDFF0DD}
Implemented Categories (IID用的是这个下面的值,IID是这个吗?)
InprocServer32
ProgID
Programmable
TypeLib (LIBID用的有什么用啊)
VERSION
网上说可能由于某些COM组件没有安装,你试试
存在,路径也是对的
InprocServer32子键的值:
默认 REG_SZ D:\......\my.dll
ThreadingModel REG_SZ Apartment
如果其他机器没有这个问题,那么很可能是这个机器环境的问题,尝试用安装光盘Repair一下
不好意思,我菜鸟啊,不晓得代理存根怎么注册的?看不明白三、关于注册
情况1:当我们使用 ATL 编写组件程序,注册不用我们来负责。编译成功后,IDE 会帮我们自动注册;
情况2:当我们使用 MFC 编写组件程序,由于编译器不知道你写的是否是 COM 组件,所以它不会帮我们自动注册。这个时候,我们可以执行菜单“Tools\Register Control”来注册。
情况3:当我们写一个具有 COM 功能的 EXE 程序时,注册的方法就是运行一次这个程序;
情况4:当我们需要使用第三方提供的组件程序时,可以命令行运行“regsvr32.exe 文件名”来注册。顺便说一句,反注册的方法是“regsvr32.exe /u 文件名”;
情况5:当我们需要在程序中(比如安装程序)需要执行注册,那么:
组件宿主 dll 依赖其他的东西不?
其他机器也是一样,我怀疑是不是那个 IID 错了,CoInitialize(NULL) 有调用过
并注册一下同解决方案下的PS_XXX之类的项目,编译后注册一下
指定的类没有在注册表中注册. 也可能是指定的dwClsContext没有注册或注册表中的服务器类型损坏
http://blog.csdn.net/gaoxiaowei/archive/2010/06/29/5701671.aspx
或者就是你的CLSID 跟IID给错了。
IID 是怎么找到?
extern "C" const CLSID CLSID_my = {0xEB6DC847,0xB9E2,0x42B7,{0xB7,0xE2,0xC3,0x59,0x9D,0xDF,0xF0,0xDD}};
已经是这样了
extern "C"
{
const CLSID CLSID_my = {0xEB6DC847,0xB9E2,0x42B7,{0xB7,0xE2,0xC3,0x59,0x9D,0xDF,0xF0,0xDD}};
const IID IID__my = {0x77819406,0xB86F,0x4E0B,{0xB7,0x57,0x14,0x3A,0x53,0xC3,0xA9,0x70}};
}
通过CLSIDFromProgID把获取的CLSID,用十六进制把每个结构体成员打出来是一样的, 也获取成功了。