DLL Aufrufe, Parameter und IDispatch (bzw. Variant)
Verfasst: Mo 3. Aug 2020, 18:42
die Funktion einer DLL soll aufgerufen werden:
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
, 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
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?
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)
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)
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;
"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?