Probleme mit DLL aus Excel
-
Hallo zusammen,
habe eine VBA Anwendung in Excel, welche eine DLL aufruft. Diese DLL habe ich mit BCB6 geschrieben. Der Aufruf der DLL funktioniert auch zunächst, wenn ich jedoch nach Ausführen der DLL die Excel-Tabelle schließe, meldet sich der Codeguard. Leider finde ich cg-Datei in diesem Fall nicht. Weiß nicht wo er das hinschreibt.
Ich gehe jedoch von einem Memory-Leck aus, da die Fehlermeldug erst beim Schließen der Excel-Anwendung erscheint.
Der ExcelCode sieht wie folgt aus:Private Declare Sub StartOpenDlg Lib "C:\Test\DLLs\Osa.dll" (ByRef Pfad As String) Sub Bauvorhaben_öffnen() Dim Adresse As String Adresse = "C:\" Call StartOpenDlg(Adresse) If Adresse <> "" Then ... End Subdie c++ dll sieht wie folgt aus:
extern "C" __declspec(dllexport) void StartOpenDlg(String &Pfad) { TOpenDialog* OpenDialog= new TOpenDialog(0); //... if(Pfad!="") OpenDialog->InitialDir=Pfad; if(OpenDialog->Execute()) { //..... Pfad=OpenDialog->FileName; } if (OpenDialog) delete OpenDialog; };Weiterhin funktioniert der DLL Aufruf nur auf Rechnern auf denen der BCB installiert ist. Dabei lasse ich die Dll weder mit Laufzeit-Packages erzeugen noch wird die RTL dynamisch gelinkt.
Weiß jemand was ich falsch mache???Danke im Voraus
Sebastian
-
Bist Du Dir sicher, dass Du einfach in das Basic-Objekt "Adresse" so reinschreiben darfst? Was passiert, wenn der String hinreichend groß ist bzw. sichergestellt ist , dass nichts überschrieben wird?
Du kannst mal schauen, welche Libraries Deine dll benötigt. Google mal nach depends.exe.
-
Ich denke, das liegt an den verschiedenen "String"- Typen.
BCB nimmt AnsiString, das passt zu (fast) gar nix ausserhalb von BCB & Co.
Ich würde ein Zeiger char- Feld übergeben (Groesse z.B. MAXPATH)
In den Puffer wird der AnsiString hineingebügelt (falls nicht zu lang)Dann hats auch keine Probleme mit dem Format/ der Speicherbelegung.
Gruss
FrankPS: AnsiString als Parameter sollte nur klappen, wenn die DLL und die Anwendung beide mit (demgleichen) BCB gemacht sind.