请教进程内COM对象如何传递一个TDataSet对象给应用程序?(100分)

D

DickWu

Unregistered / Unconfirmed
GUEST, unregistred user!
我手工生成的COM对象和接口定义的源码,, COM对象是从TComObject继承的,
COM对象中有一个数据集对象:
TMyComObj = class(TComObject,IMyInterface)
private
FDataSet : TMemDataTable; //一种内存表,可以和datasource连接.
protect
....
public
procedure initiall;override;

end;
我在初始化过程中建立该FDataSet底册实例,然后根据COM客户端发送的命令,用FDataSet选取
适当的数据,现在我要用主程序中的DBGrid显示或者处理该COM接口中的FDataSet中的数据,
我在COM对象中定义一个函数: function GetDataSet:TDataSet;直接返回该对象,然后将
主程序中的DataSource的DataSet属性指向该数据集对象,当FDataSet中的数据为空时,显示正常,
一旦FDataSet中有数据,即显示指针错误.但是如果该数据集没有和DataSource的ataSet关联,
却又一切征程,
请教各位大侠这是怎么回事? 有什么解决办法嘛?
给出解决办法的大侠我会另外给出200分.

谢谢
 
有人知道嘛?
是否这种情况不能直接返回对象?。。。
 
我找到原因了,是因为进程内COM对象是以DLL方式存在的,它必须和普通DLL一样,如果
使用string参数的话,必须将SHareMem包含在uses的第一个,程序中我并没有显式的使用
string参数,只是返回了TDataset,并赋值给主程序中连接DBGrid的TDataSource,估计
DBGrid在显示的时候和该TDataSet有string参数的传递过程。
我在程序以及包含该COM对象的Activex库中包含了ShareMem,就没有问题了。
奇怪的是在用Wizard生成Activex库的时候,代码中没有普通DLL框架代码中关于ShareMem
的提示。估计这是一个疏忽。
随便说一下: 大家如果问了问题最后找到了答案,最好把答案也在这里说一下,你可以
问问题,别人也能学点东西。我发现很多人问了问题等着别人帮助他,等他自己解决了后
别人问他怎么解决的,他又不说,只知道索取,不知道给予,很不道德,也许这就是国人
的劣根性吧,而且这个现象在这里也不是个别的。
 
我怎么收回我的分数啊?
 
顶部