BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 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 nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten