描述:
我刚学com设计 就是我定义了2个接口 怎么老是只能调用一个接口那? 第2个失败
望指点 谢谢
代码:
//.ild文件
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(0E637BA6-36B4-4592-816B-13696D798BD4),
helpstring("IFun Interface"),
pointer_default(unique)
]
interface IFun : IUnknown
{
[helpstring("method ADD")] HRESULT ADD([in] long n1,[in] long n2,[out ,retval] long* pval);
[helpstring("method CAT")] HRESULT CAT([in] BSTR n1,[in] BSTR n2,[out,retval]BSTR *pval);
};
[ // 所谓手工输入,其实也是有技巧的:把上面的接口描述(IMathe)复制、粘贴下来,然后再改更方便哈
object,
uuid(0E3F4F20-2122-4686-9F83-25B39FCA0B35), // 手工或用工具产生的 IID
helpstring("IStr Interface"),
pointer_default(unique)
]
interface IStr : IUnknown
{
// 目前还没有任何接口函数
[helpstring("method Cat")] HRESULT Cat([in] BSTR s1, [in] BSTR s2, [out,retval] BSTR *psVal );
};
[
object,
uuid(E1A504C7-D979-4ca3-8F30-EF6F93E887DB),
helpstring("IMath Interface"),
pointer_default(unique)
]
interface IMath : IUnknown
{
[helpstring("method Mul")] HRESULT Mul([in] long n1,[in]long n2,[out,retval]long *pnVal);
};
[
uuid(67F86B21-C2F7-491A-BA5C-C22C6F879A33),
version(1.0),
helpstring("Simple1 1.0 Type Library")
]
library SIMPLE1Lib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(6DF95CA8-3934-4719-B881-57C19BCABA53),
helpstring("Fun Class")
]
coclass Fun
{
interface IFun;
interface IStr; // 别忘了呦,这里还有一个那
[default]interface IMath;
};
};
而且我用 OLE VIEWER也能看到我定义的所有接口 就是调用失败
解决方案1:
肯定是你的组件coclass Fun 这个类里面没有把接口的正确值返回呀
解决方案2:你的IDL应该没问题,估计你组件实现里有问题。
解决方案3:你调试状态试一下呀。估计是你的这个接口没有生成!或者QueryInterface里面没有返回S_OK这个值。