Показать сообщение отдельно
  #5  
Старый 30.11.2024, 10:14
infopol infopol вне форума
Прохожий
 
Регистрация: 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 это как помощь для расширения функционала
Ответить с цитированием