请sunbo过来,如何在COM接口方法中,传递TClientDataSet的Data(OleVariant类型)?

ljianq 2002-07-09 01:05:27
在BCB5中,COM接口方法中可以使用TVariant类型的参数,通过这样的参数可以直接
传递TClientDataSet的Data或Delta,但在BCB6中TVariant不能使用了。令我不明白的是:在远程数据模块使用TVariant传递不会产生编译错误。

请问如何使用VARIANT类型来传递TClientDataSet的Data?
...全文
49 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunbo 2002-07-10
  • 打赏
  • 举报
回复
要想快速提高自己,有时,去查看一下有关的VCL源码实现还是很有帮助的。花了我 n 多时间,希望能对你有所帮助。
sunbo 2002-07-10
  • 打赏
  • 举报
回复
要想快速提高自己,有时,去查看一下有关的VCL源码实现还是很有帮助的,花了我 n 多时间,希望能对你有所帮助。
sunbo 2002-07-10
  • 打赏
  • 举报
回复

看一下这个,IAppServer的IDL定义:

HRESULT AS_GetRecords(
[in] BSTR ProviderName,
[in] long Count,
[out] long* RecsOut,
[in] long Options,
[in] BSTR CommandText,
[in, out] VARIANT* Params,
[in, out] VARIANT* OwnerData,
[out, retval] VARIANT* Value);

Borland 的方法包装:

virtual HRESULT __safecall AS_GetRecords(const WideString: ProviderName, int Count, int &RecsOut, int Options, const WideString: CommandText, OleVariant ¶ms, OleVariant: &OwnerData, OleVariant &GetRecords_result) = 0 ;

OwnerData实际上是OleVariant的引用。

你可以参照OwnerData的定义来传递 TClientDataSet的Data

另外 TVariant 用来配合微软的ATL来使用的。OleVariant是VCL的提供的COM支持。我没有CB6,只能大致告诉你做法:

//IDL定义
HRESULT GetVarValue([in, out] VARIANT * varValue );
//可能的COM 方法
STDMETHODIMP TZodiac11Impl::GetVarValue(VARIANT* varValue)
{
OleVariant varTemp = *varValue;
// 使用 varTemp
OleVariant varResult;
// 初始化 varResult

// 或者使用::VariantCopy
*varValue = VARIANT(varResult);
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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