高分请教:OleVariant赋值问题

sun2000way 2003-10-17 11:46:18
用VC写的控件在Delphi里注册后,数组类型会出现一个OleVariant参数,我现在需要调用这个方法,可给OleVariant参数赋值后,运行时总是说我传的不是一个数组类型的参数?
请问,怎样给该参数赋值,让函数能够认识是一个数组,能够工作下去???
函数在VC中原型:
STDMETHOD(ItemSelect)(BSTR varname, short row, short column, short height, short width, VARIANT_BOOL autosend, VARIANT items);
***items是一个一维数组

Delphi注册后的函数:
procedure ItemSelect(const varname: WideString; row: Smallint; column: Smallint; height: Smallint; width: Smallint; autosend: WordBool; items: OleVariant); safecall;
...全文
112 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun2000way 2003-10-20
  • 打赏
  • 举报
回复
用VB写传一个一维数组是可以实现的,可是Delphi就没办法
huojiehai 2003-10-17
  • 打赏
  • 举报
回复
看这个中的转换
http://haitian.myrice.com/ByteDataTrans.txt
snowfog 2003-10-17
  • 打赏
  • 举报
回复
var
a: OleVariant;
begin
a := VarArrayCreate([0, 1], varVariant);
a[0] := 'test';
a[1] := 3;
ItemSelect(..., a);
end;
snowfog 2003-10-17
  • 打赏
  • 举报
回复
将一个变量定义为OleVariant,然后使用VarArrayCreate创建动态Variant数组就可以了。
dickeybird888 2003-10-17
  • 打赏
  • 举报
回复
好象没有了
(·¥·)
snowfog 2003-10-17
  • 打赏
  • 举报
回复
是不是在VC中报的错?我想可能是VC中的VARIANT不支持数组。
sun2000way 2003-10-17
  • 打赏
  • 举报
回复
海天子:OleVariant在Delphi之间我都试了,没什么问题
秋风舞:这种方法我已经试过了,还是不行,有没有其他的方法

关键在于原型中 VARIANT items
随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。 今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。 业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent) private b_insertFlag :Boolean; b_updateFlag :Boolean; b_deleteFlag :Boolean; d_rowVersion :double; procedure setInsertFlag(pInsertFlag :Boolean); function getInsertFlag: Boolean; procedure setUpdateFlag(pUpdateFlag :Boolean); function getUpdateFlag: Boolean; procedure setDeleteFlag(pDeleteFlag :Boolean); function getDeleteFlag: Boolean; procedure setRowVersion(pRowVersion :double); function getRowVersion:double; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published property bInsertFlag: Boolean read getInsertFlag write setInsertFlag; property bUpdateFlag: Boolean read getUpdateFlag write setUpdateFlag; property bDeleteFlag: Boolean read getDeleteFlag write setDeleteFlag; property dRowVersion: double read getRowVersion write setRowVersion; property POLEData:OleVariant read GetOLEData write SetOLEData; end;TUserVO = class(TValueObject) private id: string; name: string; password: string; 。。。。。。。。。。 VO的列表:TValueObjectList = Class(TObjectList) private ValueObject: TValueObject; ClassName: TClass; procedure setClassName(pTmpClsName :TClass); function getClassName: TClass; procedure setValueObject(pTmpVO :TValueObject); function getValueObject: TValueObject; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published function AddItem(index: integer; AObject: TObject ):Integer; virtual; function GetItem(index, itemid: integer ): TObject; virtual; function CountItem:Integer; virtual; public constructor Create; virtual; destructor Destroy; override; procedure AfterConstruction; override; property PClassName: TClass read getClassName write setClassName; property POLEData: Ole

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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