在ADO中可以把创建的ADOconnect对象作为参数传递给
RecordeSet,我如何能够实现相同的功能呢?
我要输出一个对象让用户设定一些属性值,然后把这个对象传递给
另外一个对象进行处理。
在对象创建时我定义了双接口,但是我不太清楚在ATL中如何使用,
希望高人指点。
我建立的demo程序为:
定义一个simple object,有一个属性pp,支持get和put方法
interface Ia1 : IDispatch
{
[propget, id(1), helpstring("property pp")] HRESULT pp([out, retval] long *pVa
l);
[propput, id(1), helpstring("property pp")] HRESULT pp([in] long newVal);
};
定义另外一个simple object,调用a1,希望得到a1的属性
interface ICalla1 : IDispatch
{
[id(1), helpstring("method calla1")] HRESULT calla1([in]VARIANT a1);
}; ~~~~~~~~
1.输入参数类型有一定的疑惑,是否一定要用VARIANT类型
2.如何在calla1的方法中得到a1中的值呢?在调用Com对象的三种方法中
在使用tlb类型库通过classwizard建立一个类
#import “tlb"
在Com自身都是不适用的,因为tlb在编译后才生成。
真是不知道如何做,从前做的Com只是封装函数,看来还是没有掌握Com的精髓啊!
RecordeSet,我如何能够实现相同的功能呢?
我要输出一个对象让用户设定一些属性值,然后把这个对象传递给
另外一个对象进行处理。
在对象创建时我定义了双接口,但是我不太清楚在ATL中如何使用,
希望高人指点。
我建立的demo程序为:
定义一个simple object,有一个属性pp,支持get和put方法
interface Ia1 : IDispatch
{
[propget, id(1), helpstring("property pp")] HRESULT pp([out, retval] long *pVa
l);
[propput, id(1), helpstring("property pp")] HRESULT pp([in] long newVal);
};
定义另外一个simple object,调用a1,希望得到a1的属性
interface ICalla1 : IDispatch
{
[id(1), helpstring("method calla1")] HRESULT calla1([in]VARIANT a1);
}; ~~~~~~~~
1.输入参数类型有一定的疑惑,是否一定要用VARIANT类型
2.如何在calla1的方法中得到a1中的值呢?在调用Com对象的三种方法中
在使用tlb类型库通过classwizard建立一个类
#import “tlb"
在Com自身都是不适用的,因为tlb在编译后才生成。
真是不知道如何做,从前做的Com只是封装函数,看来还是没有掌握Com的精髓啊!
解决方案 »
- 求正则表达式
- ws2_32.lib在window 7 下面可以用吗
- 用DOS命令来编译一个*.cpp时,所要调用的*.h放在不同的文件夹下了,怎么办?
- VC++编写图像处理的算法
- 如何从DLL中提取菜单并合并到应用程序主菜单中
- 我想撮一个简单的图像检索系统,请大家给点建议
- 一个关于指针和引用的例子。(纠缠不休啊,呵呵)
- 关于类的定义重复的问题?
- 关于CCmdTarget::DispatchCmdMsg()函数的疑惑
- 顶级问题。。。。。。VC 系统 DEBUG ?
- 我的程序视图是从CRichEditView派生的,生成好了就可以直接打字,我想编程得到我在里面打的字符,应该怎么做?
- 我的VIEW是继承自CRichEditView,请问怎么在里面画我自己的图标,象VC的调试时的断点图标和光标位置的图标?
2.
ICallalImpl::callal(VARIANT al) {
if (al.vt != VT_DISPATCH)
return E_INVALIDARG;
Ial *p = al.pdispVal;
...
}
3. 在COM Project本身是不需要import的,因为编译器可以根据idl文件生成.h文件.
我这里有个DEMO,不知道你需要否?
cannot convert from 'struct IDispatch *' to 'struct Ia1 *'
问一下:Ia1使用的是Vtable接口类型,IDispatch接口能和Ia1进行直接赋值吗?
IDispath *pDispath = al.pDispVal;
Ial *p;
HRESULT hr = pDispath->QueryInternface(p);
if(SUCCEEDED(hr))
{
.............//do the thing you want to do
}
该对象的方法和属性。
我不太想直接使用IDispatch->Invoke()感觉太复杂了!
能不能使用Com Interface(VTable)方式来处理!如何将Dispatch接口转换成IA1的形式呢?
请执教!