
30.11.2024, 10:14
|
Прохожий
|
|
Регистрация: 03.06.2021
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
|
|
Сделал такой пример
Цитата:
Сообщение от lmikle
вот что нагенерил ИИ:
Код:
type
IMyComInterface = interface(IDispatch)
['{00000000-0000-0000-0000-000000000000}']
procedure ProcessArray(Values: OleVariant); safecall;
end;
Код:
procedure TMyComObject.ProcessArray(Values: OleVariant);
var
i: Integer;
begin
if VarIsArray(Values) then
begin
for i := VarArrayLowBound(Values, 1) to VarArrayHighBound(Values, 1) do
begin
// Process each element in the array
ShowMessage(IntToStr(Values[i]));
end;
end;
end;
Вызов:
Код:
var
ComObj: IMyComInterface;
Values: OleVariant;
begin
ComObj := CreateComObject(CLASS_MyComObject) as IMyComInterface;
Values := VarArrayCreate([0, 2], varInteger);
Values[0] := 10;
Values[1] := 20;
Values[2] := 30;
ComObj.ProcessArray(Values);
end;
Тут передача интов в примере, поменять на varString, а исходный массив - простой динамический массив, только надо посмортеть, если не ошибаюсь, то лучше использовать Array Of WideString
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,ComObj,
OleConst,OleCtrls,ShlObj, ComServ,Types,
Dialogs, StdCtrls;
type
IMyComInterface = interface ['{00000000-0000-0000-C000-000000000000}']//{00CA209B-5FB2-4EDA-952C-4C286F59EF9B}']
// function GetNumber : Integer;
end;
TMyComObject = class (TInterfacedObject,IMyComInterface)
private
procedure ProcessArray(Values: OleVariant);
public
end;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
//const
//CLASS_MyComObject: TGUID = '{00000000-0000-0000-C000-000000000000}';
{$R *.dfm}
procedure TMyComObject.ProcessArray(Values: OleVariant);
var
i: Integer;
begin
form1.Memo1.Clear;
form1.Memo1.Lines.Add('Òåñò ïðîöåäóðû ProcessArray(Values)');
if VarIsArray(Values) then
begin
form1.Memo1.Lines.Add('Ðàçìåð '+IntToStr(VarArrayHighBound(Values, 1)+1 ));
for i := VarArrayLowBound(Values, 1) to VarArrayHighBound(Values, 1) do
begin
// Process each element in the array
form1.Memo1.Lines.Add(IntToStr(Values[i]));
// ShowMessage(IntToStr(Values[i]));
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ComObj: TMyComObject;//IMyComInterface;
Values: OleVariant;
begin
ComObj:=TMyComObject.Create();
//ComObj := //CreateComObject(CLASS_MyComObject) as IMyComInterface;
Values := VarArrayCreate([0, 4], varInteger);
Values[0] := 10;
Values[1] := 20;
Values[2] := 30;
Values[3] := 40;
Values[4] := 50;
ComObj.ProcessArray(Values);
ComObj.Destroy;
end;
initialization
end.
Задача создать свой OleObject для работы с массивами.Просто у меня мало знаний.Я занимаюсь автоматизацией бухучета.А Delphi это как помощь для расширения функционала
|