高手请帮忙看看这段代码,有关com的

csb110 2005-03-22 08:59:16
接口的定义:
class IIO:public IUnknown
{
public:
virtual HRESULT outA()=0;
virtual HRESULT outB()=0;
};

idl文件:
import "unknwn.idl";

[
object,
uuid(3E78AD17-09BD-47a9-B34E-584463A189ED),
pointer_default(unique)
]

interface IIO : IUnknown
{
HRESULT outA();
HRESULT outB();
};
最上面是IIO接口的定义。下面的IDL是该接口的描述文件,并用MIDL工具自动生成它的.c,.h文件,连接成dll文件,作为该接口的marshal/unmarshal代码。在实现进程外组件访问的程序中,运行时总是报错(可以肯定就是这个接口的问题,因为系统定义的接口都可以用,只有IIO不行),为什么呀?
...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aerror 2005-03-24
  • 打赏
  • 举报
回复
正确的做法应该是,你用midl编译的你的idl文件,然后生成的文件,有这像有抽象类的定义.
bobob 2005-03-23
  • 打赏
  • 举报
回复
什么错
csb110 2005-03-23
  • 打赏
  • 举报
回复
我用的CoGetClassObject(),创建一个类厂接口,显示调用已经成功,类厂接口有效。然后从类厂接口
CreateInstance()的时候获得IIO接口就报错
sjcode 2005-03-23
  • 打赏
  • 举报
回复
如果是在访问CLSID_IIO出现问题,看看你的CoCreateInstance有没有写错。
不行再为它加一个类厂,试试。

不知道你是在哪一步报错
xiangding 2005-03-23
  • 打赏
  • 举报
回复
帮你顶一下
hushuangyan74 2005-03-23
  • 打赏
  • 举报
回复
恭喜楼主解决问题,学习!
csb110 2005-03-23
  • 打赏
  • 举报
回复
老问题解决了。
把class IIO:public IUnknown
{
public:
virtual HRESULT outA()=0;
virtual HRESULT outB()=0;
};
改为:
class IIO:public IUnknown
{
public:
virtual __stdcall HRESULT outA()=0;
virtual __stdcall HRESULT outB()=0;
};就万事ok了。
不过不明白我在outA()内部的cout<<".."<<endl;为什么不执行。改成messagebox()就可以执行,可我的客户端是console程序呀,执行cout应该没问题的呀,不明白,困惑中。请高手解惑!!win32 app和win32 console app到底有什么深层次的差别吗?

3,245

社区成员

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

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