• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 新手问大家一个问题,求解,先谢谢了!!!

新手问大家一个问题,求解,先谢谢了!!!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了新手班主任常见问题,新手上路常见问题,新手开车常见问题,lol新手礼包回答问题,lol新手大礼包问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 新手问大家一个问题,求解,先谢谢了!!!
描述:

写了个MFC 控件,中间调用一个ATL写的COM组件,如下:
LONG CSedPrinterOcxCtrl::Open(LPCTSTR DeviceName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码
_bstr_t strstr ="LPT";
::CoInitialize(NULL);
CLSID clsid;
HRESULT hr=::CLSIDFromProgID(OLESTR("Sed_Ptr_Module.SedPtrMod.1"),&clsid);//CLSCTX_INPROC_SERVER
ISedPtrMod *ptr;
hr=::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(ISedPtrMod),(LPVOID*)&ptr);
if(S_OK==hr)
{
ptr->OpenDevice(strstr);//OpenDevice()是COM内提供的函数
}
::CoUninitialize();
return 0;
}
ATL的COM组件中OpenDevice()功能由一个MFC动态库提供,ATL项目中调用如下:
STDMETHODIMP CSedPtrMod::OpenDevice(BSTR DeviceName, LONG* SedResult)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加实现代码
TCHAR s[MAX_PATH];
DWORD len = MAX_PATH;
LPCTSTR lpszKeyName = L"SOFTWARE\\OLEforRetail\\ServiceOPOS\\POSPrinter\\BTP-R990";
if(key.Open(HKEY_LOCAL_MACHINE, lpszKeyName) == ERROR_SUCCESS)
{
if(ERROR_SUCCESS==key.QueryStringValue(L"LDN",(LPTSTR)s,&len))
{   
DWORD len = MAX_PATH;
BSTR p=::SysAllocString(s);
LONG cmp=BstrCmp(p,DeviceName);
if(cmp==S_OK)
{
     Open("SP580");//Open()由一个MFC动态库提供
}
else
{
return S_FALSE;
}
}
}
return S_OK;
}
问题来了:各个项目单独编译均正确,但在OCX项目内调试运行时,执行到“hr=::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(ISedPtrMod),(LPVOID*)&ptr);”时就出错"hr 0x80040154 没有注册类别".
但时要把ATL项目中的“Open("SP580")”行屏蔽,各项目内调试运行就正常了?
这是怎么回事??哪里出错了呢??


解决方案1:

你不觉得你这两个代码atl和mfc在循环调用吗?

解决方案2:

和dll一块调,确定是哪里出的问题


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 新手问题进来都有分
  • 新手问题,请问如何从COM组件中取得返回值?
  • 新手的一个小问题
  • 新手小问题得分容易谢谢各位
  • 新手问题!请帮帮忙
  • 新手问题(怎样调用DLL)
  • 新手关于dll的问题,谁来指点一下呀!
  • 新手问个线程编程的问题100分
  • 新手的问题?aboutATLandCOM
  • 新手问题:如何使用Server对象

相关文章

  • 2017-06-04 如何实现像IE窗口的移动?
  • 2017-06-05 怎样在自己的程序中打开word,而不是用我word打开
  • 2017-06-04 如何把应用程序转换成ActiveX?(急)
  • 2017-06-04 请高手进来,关于注册DLL
  • 2017-06-04 关于在IE里面抓词的问题
  • 2017-06-04 ATL中如何设置控件大小
  • 2017-06-05 急!线程内部发送消息时出错!
  • 2017-06-04 一个类里有多个接口怎么实现?
  • 2017-06-05 接着问:连接问题
  • 2017-06-05 求一个微观交通模拟的代码程序!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • directshow黑白视频转为伪彩显示的问题
    • MediaPlayer如何播放VOX文件
    • 学COM可不可已不用学MFC,而直接开始ATL(我现在有C/C++基础,但一直用VB);
    • 有一个EXECOM服务器和一个EXE客户端,如何在首先运行了EXECOM服务器后,EXE客户端调用GetActiveObject返回成功???
    • 不显示删除回复显示所有回复显示星级回复显示得分回复求助。关于MAPI的问题,非常之无助,望得到帮助。
    • 求助:请问怎么建立一个服务?
    • web调用com组件怎么释放?
    • 关于CoUninitialize
    • 初做服务端程序关于线程方面的一些问题
    • 怎样动态创建和删除一个ActiveX的控件呢?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有