IDL中自定义数据类型的问题-如何使得支持自定义的类

tomPeakz 2002-07-15 03:27:00
我在组件工程中,创建IDL接口的时候,发现自己无法在IDL接口文件中使用
自定义的类作为方法的参数,请问这是不是IDL自身的限制呢?
还是说有其它的解决办法?
import "oaidl.idl";
import "ocidl.idl";

[
object,
uuid(AB61266D-D8EA-464E-BADC-A85D8708AD1E),

helpstring("IContact Interface"),
local,
pointer_default(unique)
]
interface IContact : IUnknown
{
[helpstring("method HasNext")] BOOL HasNext(CMyClass * pMyClass);
//如何使得支持自定义的类?

};


...全文
340 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomPeakz 2002-07-16
  • 打赏
  • 举报
回复
没错没错,使用强制转换就可以喽。谢谢各位,给分。
typedef vector<string> pInfoTemp;
pInfoTemp pTemp;
hr = pCon->Get(reinterpret_cast<VARIANT *>(&pTemp));

STDMETHODIMP CCon::Get(VARIANT * pInfo )
{
//Test Only
typedef vector<string> pInfoTemp;
pInfoTemp * pIn = reinterpret_cast<pInfoTemp *>(pInfo);
pIn->push_back(szObjName[0]);
pIn->push_back(szObjName[1]);
pIn->push_back(szObjName[2]);


return S_OK;
}

houzx 2002-07-16
  • 打赏
  • 举报
回复
就用"VARIANT 变量名",返回值用“VARIANT *”,我原来用map模板实现过类似ASP中的“Session”变量的属性,在Vc中直接赋值即可,不用强制转换
tomPeakz 2002-07-16
  • 打赏
  • 举报
回复
to houzx()
那在IDL文件中如何定义?
houzx 2002-07-16
  • 打赏
  • 举报
回复
vector<xxxx>可定义成VARIANT传
Wargod2002 2002-07-15
  • 打赏
  • 举报
回复
没区别吧
tomPeakz 2002-07-15
  • 打赏
  • 举报
回复
你的意思是只要是(CMyClass * pMyClass) 的地方,均做成
(long * pMyClass)?再强制转换成需要的类型,那为什么不搞成(void * pMyClass)?
Wargod2002 2002-07-15
  • 打赏
  • 举报
回复
呵呵,对象是不行了,只能是指针,
这些东东统统做成传long型的,用强制转换
tomPeakz 2002-07-15
  • 打赏
  • 举报
回复
to Wargod2002(Wargod2002)
对,没错,不过现在这个东西就我们自己用,就用C++,别的均不在考虑之内。
还有比如我在以前的代码中使用了STL的内容做参数传递,你怎么做接口处理?
[helpstring("method HasNext")] BOOL HasNext(vector<xxxx>);
这样是错误的。
Wargod2002 2002-07-15
  • 打赏
  • 举报
回复
那就不明白你为什么要做成com了,因为这么做就算做出来了,
也只有c++才能用,失去了做成组件的意义
tomPeakz 2002-07-15
  • 打赏
  • 举报
回复
to Wargod2002(Wargod2002)
我明白你的意思,我现在就是这么做的。
就是在实现接口的代码里面直接调用了CMyClass的东西,但是
因为我以前的和CMyClass类打交道的代码,使用了CMyClass类做方法的指针参数,而接口定义IDL里面我又不知道如何把CMyClass嵌入进去,就是无法对应。
你明白我的难题了吗?
Wargod2002 2002-07-15
  • 打赏
  • 举报
回复
你的类的实现复杂,接口应该不复杂吧?
你可以做一个接口,暴露外界要用到的方法,
在实现这个接口的类里嵌套CMyClass的对象,
调用这个对象来实现接口的方法
tomPeakz 2002-07-15
  • 打赏
  • 举报
回复
还有呢,比如我在以前的代码中使用了STL的内容做参数传递,你怎么做接口处理?
[helpstring("method HasNext")] BOOL HasNext(vector<xxxx>);
这样是错误的。

houzx 2002-07-15
  • 打赏
  • 举报
回复
同意,传CMyClass中的接口类
tomPeakz 2002-07-15
  • 打赏
  • 举报
回复
这个CMyClass是我以前做的一个类,现在因为改进,把它加入到ATL程序框架内,以保持对外的一致性。我也明白可以HasNext(IMyClass *pMyClass),
但是如何改造啊,我的CMyClass类十分复杂。
Wargod2002 2002-07-15
  • 打赏
  • 举报
回复
你可以传一个接口嘛

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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