![]() |
LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo Community,
ich würde gerne Berechnungsfunktionen aus meinen Delphi-DLL’s nach Excel-Manier auch in einer Calc-Tabelle von LibreOffice verwenden. Ein einfaches Beispiel sieht z.B. so aus:
Code:
Und die Benutzung der Routine in der Calc-Tabelle sieht wie folgt aus:
Declare Function Reynolds Lib "SuchPfad\ChemWingsFlow.dll"_
(ByVal w#, ByVal d#, ByVal Ny#) As Double
Code:
Hierbei kommt es stets zu einer Fehlermeldung:
= REYNOLDS(E6;E7;E8)
Code:
Meine DLL verwendet stets
"BASIC-Laufzeitfehler: Fehler beim Laden einer DLL-Datei."
Delphi-Quellcode:
In Excel funktioniert es seit eh und je einwandfrei.
StdCall;
Leder helfen mir dabei selbst die 4 neuesten Bücher über Makro-Programmierung von LibreOfice-Großmeister Thomas Krumbein auch nicht weiter, weil er immer SUB’s mit eigenen Anzeigefenstern verwendet und keine Funktionen, die in die Zellen schreiben. Diese Frage habe ich bereits vor 9 Monaten auch im LibreOfice-Forum gestellt, ![]() 1: Was mache ich falsch? 2: Geht es überhaupt, daß meine Routinen aus der DLL direkt in die Zelle(n) der Calc-Tabelle schreiben? 3: Kann man mit Calc eine sogenannte "Matrix-Funktion" (= ein- und mehrdimensionale Arrays) definieren und die Rückgabewerte der Funktion direkt in die Tabellenzellen schreiben? Kennt vielleicht jemand das Problem von Euch und hat bereits eine Lösung dafür, oder weiß definitiv, daß es in LibreOfice nicht möglich ist? Herzlichen Dank für Eure Hilfe im Voraus! Viele Grüße Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo,
64bit <-> 32bit - Problem? Ist Dein LibreOffice 64Bit? |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Stimmt die Bitigkeit?
|
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Meine DLL ist für 32-Bit-Windows kompiliert.
Gruß, Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Halo,
Andreas13, ja, und wie Bittig ist dein LibreOffice? |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
LibreOffice ist 64-Bit.
Aber auch mein 64-Bit-Excel kann meine 32-Bit-DLL's benutzen. Andreas PS: Jetzt habt Ihr mich verunsichert... Nur, um sicher zu gehen: Wie stelle ich fest, welche Bitigkeit mein Excel hat? :oops: |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Jetzt habe ich's: Mein Excel 2016 hat nur 32-Bit... :oops:
Ich muß gleich schauen, ob LibreOffice eine 32-Bit Version hat. Viele Dank & Gruß, Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo,
im TaskManager steht beim Prozess *32 oder (32Bit), wenn es ein 32-Bit-Programm ist. |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo,
Zitat:
Aber wie Du schon geschrieben hattest, hast Du ja ein 32Bit-Excel. |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Zitat:
Erstelle eine 32Bit.exe die du zwischen der 32Bit_DLL und der 64Bit Anwendung schaltest. Aus der 32Bit Anwendung sendest du dann über "WM_COPYDATA" die entsprechenden Funktionen an die 64Bit.EXE Das setzt aber fundierte Kenntnisse der Win_32Api voraus. |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Sorry, ich schäme mich wegen meines blöden Irrtums. :oops:
Inzwischen habe ich die korrekte 32-Bit-Version von LibreOffice installiert. Der einzige Unterschied im Verhalten ist nur, daß ich jetzt keine Fehlermeldung wegen der DLL mehr bekomme. Aber die Funktion aus der DLL ist in Calc leider immer noch tot...:wall: Aber wenigstens ist ein wichtiges Teilproblem – Dank Eurer Hilfe – beseitigt! Ich muß weiter experimentieren. Gruß, Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Halo,
definiere "tot". |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo Heiko,
"tot" = die Funktion tut gar nichts. In der Zelle steht eine 0. Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo,
dann los per MessageBox Debuggen. |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo zusammen,
jetzt funktioniert es endlich! Der Hauptgrund war die unpassende 64-Bit-Version von LibreOffice zu meiner 32-Bit-DLL. Allerdings war der "Wurm" in meinen mit dieser 64-Bit-Version erzeugten Testdateien (* .ods) anscheinend so tief und fest abgespeichert, daß die 32-Bit-Version LibreOffice diesen nicht mehr korrigieren konnte. Deswegen habe ich alle alten Dateien gelöscht. Nach dem Löschen aller *.ods und aller bereits existierenden Module für die Makros habe ich alles mit der 32-Bit LibreOffice-Calc neu erstellt. Und so funktioniert alles bestens! Vielen Dank für Eure Hilfe und wertvollen Tipps! Ihr habt mir sehr geholfen!:angel: Viele Grüße, Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Nur mal eine Frage zwischendurch ich habe lange nichts mit LibreOffice gemacht läuft die Schnittstelle zu VBA über UNO oder mittlerweile auch direkt ?
|
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo Rollo62,
ich mache jetzt meine ersten "Gehversuche" mit dem VBA-Teil von LibreOffice, denn erst seit Mitternacht konnte ich meine erste Funktion aus der DLL laden und ausführen. Daher kann ich noch nicht sehr viel dazu sagen. Die Schnittstelle zur DLL ist – ähnlich wie bei Excel – in einem Modul untergebracht. Das BASIC und die Bedienung inkl. Tastenkürzel sind dort im Großen und Ganzen ähnlich zu VBA. Es gibt einen Kompatibilitätsmodus und z.B. mittels
Code:
läßt sich die VBA-Unterstützung aktivieren. Angeblich ist dadurch eine weitgehende aber nicht vollständige Kompatibilität gewährleistet.
Option VBASupport 1
Noch bin ich beim Austesten & Übertragen meiner Excel-Add-In-Schnittstellen (*.XLAM) in LibreOffice, daher kann ich nichts Tieferes dazu sagen. Einfache Funktionsdeklarationen per
Code:
funktionieren aber einwandfrei. Manches muß man aber anpassen: z.B. LibreOffice - Basic erlaubt keine Umlaute im Basic-Code, VBA schon.
Declare Function ...
Mein Ziel ist hierbei, daß meine Excel-Add-In-Schnittstellen sowohl in Excel, als auch in LibreOffice funktionieren. Die eigentlichen Schnittstellen sind rein prozedural und nicht besonders komplex, denn die "Musik" in der Delphi-DLL spielt. Gruß, Andreas |
AW: LibreOffice-Calc: DLL --> Declare Function-Problem
Hallo Andreas,
dankesehr für die Info. Es scheint ja verschiedene Optionen zu geben, inkl. ActiveX, die dann wohl alle auf dasselbe hinauslaufen. ![]() (Heisst das jetzt UNO, oder ist UNO nur die Java Schnittstelle ?). Gut das VBA anscheinend kompatibel ist. Für mich war bei LibreOffice einer der Hauptgründe die bessere Kompatibilität, um von OpenOffice zu wechseln, wenn das auch auf VBA zutrifft, umso besser. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 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