BCB5-->BCB6: erstellte DLL nicht erkannt
-
Hi,
Hatte eine DLL mit BCB 5 erstellt und sie in eine Anwendung eingebunden. Wenn ich nun mit den selben sources files die DLL mit BCB 6 bilde, erkennt meine Anwendung die DLL nicht mehr. (Obwohl das Anwendungsprogramm im richtigen Ordner sucht.)
Stehe noch am Anfang des Problems, und denke dass es mit BCB version 6 zu tun hat.
Hat jemand von Euch ne Idee, oder hatte schon das gleiche Problem?
Gruss Marylin
-
Warum kompelierst du die DLL im BCB 6 neu?? Du brauchst doch nur die .lib und die .dll. Die .lib ins Projekt einbinden und dann kannste die .dll nutzen...
-
Ich moechte in der DLL in Zunkunft was veraendern und wuerde gern BCB6 benutzen.
Dumme Frage: Welche library meinst Du, die ich ins Project einbinden soll?
Die alte DLL funktioniert in meiner Anwendung.Hat sich vielleicht in BCB6 irgenwas veraendert, dass es in die DLL was hineinschreibt, was meine Anwendung nicht erkennen kann? Aber dann muesste es wenigstens die DLL als DLL erkennen, was es aber nicht tut.
-
Geh doch hin und erstell mit dem BCB6 eine DLL und kopierst dein Code aus der alten ins neue rein...
-
OK, habe ein neues BCB6 project angelegt, die orginal source files reinkopiert und kompiliert - ohne Fehler.
Neues Problem: Die Anwendung erkennt jetzt die DLL, bringt aber einen Run-time Error ('453' in VBA): can't find DLL entry point "Name der Funktion" in Pfad so und so (correkter DLL-Pfad). Der Fehler kommt beim Aufrufen der Funktion in VBA. Die Funktion wurde in VBA (Anwendungsprogramm) auch deklariert und ist fuer die Weiterleitung von Daten (gespeichert in einer Datei) zustaendig, die in der Anwendung vom User ausgewaehlt wird, zwischen VBA und der DLL. In der DLL werden die Daten dann weiterverarbeitet und zum Schluss an die Anwendung zurueckgegeben.
In VBA help steht folgende Beschreibung:
The dynamic-link library (DLL) in a user library reference was found, but the DLL function specified wasn't found within the DLL. This error has the following causes and solutions:
1. You specified an invalid ordinal in the function declaration.
Check for the proper ordinal or call the function by name.
2. You gave the right DLL name, but it isn't the version that contains the specified function.
You may have the correct version on your machine, but if the directory containing the wrong version precedes the directory containing the correct one in your path, the wrong DLL is accessed. Check your machine for different versions. If you have an early version, contact the supplier for a later version.
3. If you are working on a 32-bit Microsoft Windows platform, both the DLL name and alias (if used) must be correct.
Make sure the DLL name and alias are correct.
4. Some 32-bit DLLs contain functions with slightly different versions to accommodate both Unicode and ANSI strings. An "A" at the end of the function name specifies the ANSI version. A "W" at the end of the function name specifies the Unicode version.
If the function takes string-type arguments, try appending an "A" to the function name.Habe kontrolliert: --> Funktion ist in DLL vorhanden (ueber impdef.exe)
--> Es funktioniert alles mit BCBv5 DLL.
--> Funktion wurden als public deklariert in VBAWas koennte hier der Fehler sein? Koennte es sein, dass ich in VBA was aendern muss? Wenn die oben genannte Fehlermeldung kommt, heisst das, dass die Funktion nicht gelesen werden kann oder dass der Entry Point der DLL(allgemein) nicht gefunden wird?
Waere es besser, dieses neue Problem nochmal einzeln ins Forum zustellen?
-
datei/neu/dll-experte
-
Sorry! Was ist mit "datei/neu/dll-experte" gemeint?
-
Marylin schrieb:
Sorry! Was ist mit "datei/neu/dll-experte" gemeint?
so erstellst du dir nen funktionsrumpf für eine neue dll...
aufgrund der fehlermeldung, die du vorher gepostet hattest, hatte ich die vermutung, dass beim neukompilieren eine exe kompiliert wurd (war: "DllEntryPoint nicht gefunden")
-
Diese Empfehlung hatte ich vor ein paar Tagen von DJ BlackEagle schon bekommen, welcher ich auch gefolgt bin, so dass ich mir sicher sein kann, dass ich eine DLL erstellt habe. Ausserdem wird die DLL, gespeichert in einem bestimmten Ordner, von der Anwendung in diesem Pfad aufgerufen.
-
Hallo Marylin,
das Problem ist, dass M$ und Borland die Funktionsnamen unterschiedlich erzeugen.
Was mich wundert ist, dass es mit BCB5 gegangen sein soll. Denn dieses Verhalten haben alle Borland-Compiler.
Also, wenn Du wenn ich es rchtig verstanden habe eine mit Borland erzeugte DLL in einem VB-Projekt verwenden willst, dann deklariere Deine DLL-Funktionen mit
extern "C" void _export __stdcall MyFunction(int);Dann sollte es gehen
Gruß
Gerhard