【求解决】CLSIDFromProgID返回“无效的类字符串”,ProgID在注册表中有,为什么还返回无效的错误?

lim0610 2012-06-25 06:43:48
写了一个名为MyProject.dll的服务器COM组件,原先工程中REGISTRY中并没有向注册表写ProgID的信息,后来自己添上了,如下:

ProgID = s 'MyProject.MyCom';
查看注册表显示这个dll注册是成功的。

在客户端程序(基于对话框的MFC APP)中,stdafx.h中添加了如下两句:

#import "../bin/debug/MyProject.dll"
#import "../MyProject/Debug/MyProject.tlb"
(例程中只提示要添加第二句,我不甚明白,为了防止意外,也写了第一句,有谁能解释一下这个.tlb文件的作业?)

同时在ClientDlg.cpp文件中使用using namespace MyProjectLib;

我感觉多数工作都已经做完了,下面是我的代码部分,但是调用CLSIDFromProgID的返回值始终提示“无效的类字符串”,请教高人解决方法,谢谢啦!!!

HRESULT hr = CoInitialize(NULL);

CLSID clsid;

hr = CLSIDFromProgID(OLESTR("MyProject.MyCom"),&clsid);

if (FAILED(hr))
{
AfxMessageBox(L"COM Failed.");
return;
}

IMyCom *ptr = NULL;

hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IMyCom),(LPVOID*)&ptr);

ptr->MyF1();

ptr->Release();

CoUninitialize();
...全文
1347 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个是什么问题呀?怎么解决呀?
clever101 2013-10-04
  • 打赏
  • 举报
回复
返回值hr不对,如何返回错误信息呢?
Nancy_ 2013-08-15
  • 打赏
  • 举报
回复
楼主解决了吗
lim0610 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

一般来说,有tlb文件的话,就只import这文件就行了,不需要import 组件dll
关于那个字符串,你可以随便创建个ATL组件,看看别人是怎么写入的,当然,一般是progid里面填写正确的clsid就行了
[/Quote]

你好,关于progid里面填写clsid这点我有个疑问,我看其他注册表中的progid都是存的一个字符串,就像"***.***"这样的格式,而clsid不应该是一个大字符串吗,以短横杠“—”连接的?
lim0610 2012-06-27
  • 打赏
  • 举报
回复
谢谢zwb188cm的回复,我用ole viewer查看过了,coclass后面跟的确实是MyCom,应该是没写错,但结果依旧,好奇怪
fishion 2012-06-26
  • 打赏
  • 举报
回复
一般来说,有tlb文件的话,就只import这文件就行了,不需要import 组件dll
关于那个字符串,你可以随便创建个ATL组件,看看别人是怎么写入的,当然,一般是progid里面填写正确的clsid就行了
zwb188cm 2012-06-26
  • 打赏
  • 举报
回复
hr = CLSIDFromProgID(OLESTR("MyProject.MyCom"),&clsid);

红色部分的参数不对吧,
我的是这样写的
MyProject是TLB文件名,MYCOM是COCLASS 后面的一个类(用VC自带的工具OLE VIEW 打开你的TLB文件可以看到的)我这里是这样的,你参考看看吧,不一定对的,希望你帮到你,我发现在这里提问要盼个答案好难啊.祝你好运;
最近我也在搞这个,我的错误是CoCreateInstance不能返回SD_OK;

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧