AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi-ActiveX-DLL in VB.Net: Problem mit Strings
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi-ActiveX-DLL in VB.Net: Problem mit Strings

Ein Thema von Bbommel · begonnen am 3. Apr 2012 · letzter Beitrag vom 5. Apr 2012
 
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
669 Beiträge
 
Delphi 12 Athens
 
#14

AW: Delphi-ActiveX-DLL in VB.Net: Problem mit Strings

  Alt 5. Apr 2012, 10:11
Hiho,

hier mal die aktuellen Fortschritte...

Zunächst mal der Link zum selben Thema im Emba-Forum: https://forums.embarcadero.com/threa...70095&tstart=0

Um mal die Ergebnisse von da zusammenzufassen: Dort gab es noch einen Hinweis, dass ich die Funktionen anders deklarieren muss in der IDL-Datei, aus der dann ja letztlich die Typbibliothek entsteht. Es soll nicht der String als Rückgabewert der Funktion genommen werden, sondern HRESULT und dann der eigentliche Rückgabewert in einem out-Parameter erscheinen. Das sieht dann in der ridl-Datei so aus:
Code:
  interface IStringOps: IDispatch
  {
    [id(0x000000C9)]
    HRESULT _stdcall ReverseStr([in] BSTR aInStr, [out, retval] BSTR oResult);
  };
Witzigerweise entsteht dann in den .pas-Dateien von Delphi genau der Code mit einem "safecall", auf den shmia die ganze Zeit hinaus wollte:

So sieht es in der TLB.pas aus:

Delphi-Quellcode:
// *********************************************************************//
// Interface: IStringOps
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {8A734903-13FF-46BF-BC02-4E596CBE514F}
// *********************************************************************//
  IStringOps = interface(IDispatch)
    ['{8A734903-13FF-46BF-BC02-4E596CBE514F}']
    function ReverseStr(const aInStr: WideString): WideString; safecall;
  end;

// *********************************************************************//
// DispIntf: IStringOpsDisp
// Flags: (4416) Dual OleAutomation Dispatchable
// GUID: {8A734903-13FF-46BF-BC02-4E596CBE514F}
// *********************************************************************//
  IStringOpsDisp = dispinterface
    ['{8A734903-13FF-46BF-BC02-4E596CBE514F}']
    function ReverseStr(const aInStr: WideString): WideString; dispid 201;
  end;
Und so in der Implentierung:

Delphi-Quellcode:
type
  TStringOps = class(TAutoObject, IStringOps)
  protected
    function ReverseStr(const aInStr: WideString): WideString; safecall;
  end;

implementation

uses ComServ;

function TStringOps.ReverseStr(const aInStr: WideString): WideString;

var i: integer;
    tempStr: string;

begin
  tempStr:='';
  for I := length(aInStr) downto 1 do
    tempStr:=tempStr+aInStr[i];
  Result:=tempStr;
end;
Wie man sieht, kommt das "HRESULT" hier dann gar nicht mehr vor, stattdessen taucht aber wie gesagt dann plötzlich ein "safecall" auf.

Interessant ist jetzt, dass ich die Funktion in VB.Net nutzen kann, wenn ich sie mit später Bindung aufrufe:

Code:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim teststr As Object
        teststr = CreateObject("TestStr32Out.StringOps")
        MessageBox.Show(teststr.ReverseStr("Hallo"))
    End Sub
Das ist ja schon mal fein. Wenn ich die Funktion allerdings über "Verweis hinzufügen..." schon zur Designzeit dem Projekt hinzufügen möchte, dann knallt das ganze Visual Studio - obwohl das vorher, mit den vorigen Tests, wenigstens immer funktioniert hat.

Auch im VBscript funktioniert es nicht:
Code:
dim mystr
set mystr = CreateObject("TestStr32Out.StringOps")
wscript.echo "Hallo = "+mystr.ReverseStr("Hallo")
...führt dazu, dass der Scripting Host sich verabschiedet.

Also - Fortschritte ja, aber auch nur so irgendwie ein bisschen.

Bin gespannt auf weitere Ideen...

Bis denn
Bommel
  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 08:10 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