高手请帮忙看看这段代码,有关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不行),为什么呀?
...全文
63 点赞 收藏 8
写回复
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到底有什么深层次的差别吗?
回复 点赞
发动态
发帖子
ATL
创建于2007-09-28

3026

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告