AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign ActiveX-dlls, Interface mit call by reference Methode
Thema durchsuchen
Ansicht
Themen-Optionen

ActiveX-dlls, Interface mit call by reference Methode

Offene Frage von "himitsu"
Ein Thema von termlich · begonnen am 15. Sep 2014 · letzter Beitrag vom 15. Sep 2014
 
termlich

Registriert seit: 19. Feb 2005
Ort: Hamburg
4 Beiträge
 
Delphi 6 Professional
 
#1

ActiveX-dlls, Interface mit call by reference Methode

  Alt 15. Sep 2014, 20:00
N'Abend Community,

vielleicht könnt Ihr mir weiterhelfen. Ich erarbeite mir einen Weg, ein größeres Delphi 6 Projekt häppchenweise
auf XE5 zu portieren und beschäftige mich dabei mit ActiveX-dlls.

Häufig wiederkehrende Operationen habe ich im Alt-Code in speziellen Prozeduren gecodet, die dann per call-by-reference auf
den Objekten der Applikation werkeln (ComboBoxen, StringGrinds, etc). Diese Prozeduren möchte ich nun in ActiveX-dlls, die
ich unter XE5 entwickeln werde, shiften.

Beispiel:
Delphi-Quellcode:
procedure sel_CB(SelText: string; var CBox: TComboBox);
var
NumIndex : integer;
boolGefunden : boolean;
begin
  NumIndex:=0;
  boolGefunden:=false;
  while (not BoolGefunden) and (NumIndex <CBox.Items.Count) do begin
    if SelText = CBox.Items[NumIndex] then begin
      boolGefunden:=true;
      CBox.ItemIndex:=NumIndex
    end else Inc(NumIndex);
  end;
  if not boolGefunden then CBox.ItemIndex:=0;
end;
Im ersten Step habe ich versucht, einen WideString per reference von einer ActiveX-dll bearbeiten zu lassen.
Alles kompiliert (dll und Test-Client), aber beim Aufruf schlägt es fehl. Woran kann das liegen? Kann man überhaupt
(mit vertretbarem Aufwand) VCL-GUI-Objekte auf diese Weise von dlls bearbeiten lassen?

Test-dll mit WideString-Manipulation:
Delphi-Quellcode:
unit uC1;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
  Windows, ActiveX, Classes, ComObj, Beispiel3_TLB, StdVcl,
  Dialogs;

type
  TC1 = class(TTypedComObject, IC1)
  protected
    function showString(const s1: WideString): WideString; stdcall;
    function alterString(var s1: WideString): HResult; stdcall;
  end;

implementation

uses ComServ;

function TC1.showString(const s1: WideString): WideString;
begin
  showmessage(s1);

end;

function TC1.alterString(var s1: WideString): HResult;
begin
 s1 := s1 + ' DRANGEHÄNGT';
end;

initialization
  TTypedComObjectFactory.Create(ComServer, TC1, Class_C1,
    ciMultiInstance, tmApartment);
end.
Test-Client:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,

  Beispiel3_TLB, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  mC1 : C1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s1: WideString;
begin
 s1 := 'Vorgabe';
 mC1.showString('Würze');
 mC1.alterString(s1);
 showmessage(s1);
end;

Initialization
mC1 := CoC1.Create;

end.
Danke
Tilo
Angehängte Dateien
Dateityp: zip Beispiel-3.01.zip (74,1 KB, 2x aufgerufen)
Tilo Ermlich

Geändert von termlich (15. Sep 2014 um 20:07 Uhr)
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz