🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

DLL Aufrufe, Parameter und IDispatch (bzw. Variant)

Alles zur Programmierung im LibreOffice.
Antworten
einhorn1
Beiträge: 1
Registriert: Mo 3. Aug 2020, 17:59

DLL Aufrufe, Parameter und IDispatch (bzw. Variant)

Beitrag von einhorn1 » Mo 3. Aug 2020, 18:42

die Funktion einer DLL soll aufgerufen werden:

Code: Alles auswählen

Public Declare Function reg_Obj Lib "C:\myProj.dll" (ByRef o as Variant, ByVal v as Variant) as Long

Sub Main
	Dim x
	Dim z

	x= "aaa"
	z= "bbb"

	a= reg_Obj( x, z)
In der DLL bekomme ich jedoch als Variant-Type seltsame Werte wie $6262

wenn ich in der Declare-Anweisung "Variant" in "Object" ändere, bekomme ich sofort einen Fehler.

Das eigentlich angestrebte Ziel ist

Code: Alles auswählen

Public Declare Function reg_Obj Lib "C:\myProj.dll" (ByRef o as Variant, ByVal v as Variant) as Long

Sub Main
        ....
	a= reg_Obj( x, ThisComponent)
, um an die DLL die Komponente "ThisComponent" als "IDispatch*" -Parameter zu übergeben und dort den gesamten Code zu implementieren, den ich benötige.
Mir würde natürlich auch ein Windows-Variant-Parameter genügen (welcher implizit die IDispatch-Schnittstelle enthält).


die DLL ist übrigens in Delphi geschrieben

Code: Alles auswählen

  function	reg_Obj( var ret:OleVariant; const V:OleVariant):Integer; stdcall;
was aber keine Rolle spielt, da ich schon unzählige Calls von C++(und anderen Sprachen) zu Delphi und umgekehrt geschrieben habe und es da nie Probleme gab.

"stdcall" entnahm ich der libreoffice-Doku, habe es aber auch mit "cdecl" versucht.

beim Aufruf der DLL-function bekomme ich den korrekten Returnwert zurück, aber in den Parametern habe ich bisher nichts sinnvolles übergeben bekommen.

(wenn ich ein COM-Automatisierungs-Objekt instanziert, was ebenfalls in Delphi geschrieben ist, bekomme ich "ThisComponent" sauber als Variant übergeben, nur hilft es mir in diesem Fall nichts, da ich es unbedingt in einer lokalen DLL benötige.)
Hat jemand ne Idee?


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten