aLeXanDer.. Geschrieben 14. Juli 2008 Geschrieben 14. Juli 2008 Hallo community Ich habe eine Programm das mit folgendem code den NetDir-Pfad in der BDE ändert und fest speichert. //--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #pragma hdrstop #include <Bde.hpp> //--------------------------------------------------------------------------- #pragma argsused WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //Parameter char *ptr; int pos; AnsiString Parameter = ""; // übergebene Parameter holen ptr = GetCommandLine(); if (ptr != NULL) { Parameter = ptr; pos = Parameter.Pos("/"); Parameter = Parameter.Delete(1,pos); } //AnsiString Pfad = GetCurrentDir(); AnsiString Pfad = Parameter; const char *Adresse = Pfad.c_str(); try { if(DbiInit(NULL) == DBIERR_NONE) { hDBICur hCur = NULL; if(DbiOpenCfgInfoList(NULL, dbiREADWRITE, cfgPersistent, "\\DRIVERS\\PARADOX\\INIT", hCur) == DBIERR_NONE) { if(DbiSetToBegin(hCur) == DBIERR_NONE) { CFGDesc Config; for(; // for ever { if(DbiGetNextRecord(hCur, dbiWRITELOCK, &Config, NULL) != DBIERR_NONE) break; if(strcmpi(Config.szNodeName, "NET DIR") == 0) { strcpy(Config.szValue, Adresse); DbiModifyRecord(hCur, &Config, true); break; } } } } DbiExit(); } } catch(...) { return 1; } return 0; } [/code] Ich möchte, das das Programm auf jedem Rechner läuft ohne das ich die BPLs usw. in dem Verzeichnis brauche. Also wollte ich das Programm so compilieren das es ohne diese läuft. Also ohne Lauzeitpackages usw. Nun erhalte ich folgende Fehler [code] [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiInit(Bde::DBIEnv *)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiOpenCfgInfoList(Bde::_hDBIObj *, Bde::DBIOpenMode, Bde::CFGMode, char *, Bde::_hDBIObj *&)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiSetToBegin(Bde::_hDBIObj *)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ ...usw... Ich hab ein bisschen rumgesucht und rausgefunden das viele eine IDAPI.h miteinbinden. Diese habe ich selbst nicht auf dem Rechner gehabt. Ich hab sie aber im Internet gefunden. Nun wenn ich diese mit einbinde und die BDE.hpp ebenso erhalte ich eine vielzahl von doppeldeutigkeiten. [BCC32 Fehler] idapi.h(186): E2015 Mehrdeutigkeit zwischen 'DBIDATE' und 'Bde::DBIDATE' [BCC32 Fehler] idapi.h(187): E2015 Mehrdeutigkeit zwischen 'TIME' und 'Bde::TIME' ...usw... Und wenn ich nur die IDAPI.h ohne BDE.hpp include erhalte ich fehler wie [BCC32 Fehler] File1.cpp(45): E2034 Konvertierung von 'unsigned long' nach 'unsigned long *' nicht möglich [BCC32 Fehler] File1.cpp(45): E2342 Keine Übereinstimmung des Typs beim Parameter 'phCur' ('unsigned long *' erwartet, 'unsigned long' erhalten) ...usw... Hat jemand eine Idee was ich verkehrt mache? Danke Alex Zitieren
Klotzkopp Geschrieben 14. Juli 2008 Geschrieben 14. Juli 2008 Nun erhalte ich folgende FehlerDas sind Linkerfehler. Das hat also nicht direkt etwas mit deinem Code zu tun, sondern damit, dass die Bibliothek, die diese Funktionen enthält, nicht zu deinem Programm dazugelinkt wurde. Das ist in aller Regel nichts, was du durch Codeänderungen beheben kannst, sondern nur in den Projekteinstellungen. Ich hab ein bisschen rumgesucht und rausgefunden das viele eine IDAPI.h miteinbinden. Diese habe ich selbst nicht auf dem Rechner gehabt. Ich hab sie aber im Internet gefunden.Eine ganz schlechte Idee. Header stellen in der Regel Schnittstellen zu Bibliotheken dar. Dadurch, dass du dir irgendwoher die Schnittstelle einer Bibliothek beschaffst, die du nicht hast, hast du nichts gewonnen. Du hast ja auch nicht plötzlich einen Garten, nur weil du dir eine Terassentür kaufst. Zitieren
aLeXanDer.. Geschrieben 14. Juli 2008 Autor Geschrieben 14. Juli 2008 Das ich am Code nix ändern muss, ist mir klar, da ja das Programm einwandfrei compiliert, wenn man die Eigenschaften wie -> Optionen ->C++ Compiler -> Debbuging Hacken entfernen bei : - Debug-Informationen - Zeilennummer für das Debuggen ->Linker -> Linken Hacken entfernen bei : - Dynamische RTL - Vollständige Debug-Informationen ->Packages Hacken entfernen bei : - Laufzeit-Packages verwenden abändert. Also fehlt aber dennoch ein Include, oder lieg ich falsch? rauszufinden gilt welcher?! Zitieren
Klotzkopp Geschrieben 14. Juli 2008 Geschrieben 14. Juli 2008 Das ich am Code nix ändern muss, ist mir klar, da ja das Programm einwandfrei compiliert, wenn man die Eigenschaften wie -> Optionen ->C++ Compiler -> Debbuging Hacken entfernen bei : - Debug-Informationen - Zeilennummer für das Debuggen ->Linker -> Linken Hacken entfernen bei : - Dynamische RTL - Vollständige Debug-Informationen ->Packages Hacken entfernen bei : - Laufzeit-Packages verwenden [/CODE] abändert.Ja dann mach das doch so. Wo ist das Problem? Übrigens: "Hacken" ist etwas, das man mit Holz macht, oder ein anderes Wort für Ferse. Du meinst "Haken". Also fehlt aber dennoch ein Include, oder lieg ich falsch?Waren wir uns nicht gerade einig, dass man Linkerfehler nicht dadurch behebt, dass man etwas am Code ändert? Und was ist das Hinzufügen einer Includedirektive, wenn keine Codeänderung? Du willst ohne Laufzeitpackages bauen, ohne Laufzeitpackages funktioniert es, also wo ist das Problem? Zitieren
aLeXanDer.. Geschrieben 14. Juli 2008 Autor Geschrieben 14. Juli 2008 Komm vom Dorf da tut man schon mal haken und hacken verwechseln Und es ist leider andersrum. Compilieren mit der Option Packages: Laufzeit-Packages verwenden und Haken gesetzt , funktioniert. Laufzeit-Packages verwenden und Haken nicht gesetzt , Fehlermeldungen. [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiInit(Bde::DBIEnv *)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ Zitieren
Klotzkopp Geschrieben 14. Juli 2008 Geschrieben 14. Juli 2008 Komm vom Dorf da tut man schon mal haken und hacken verwechselnTut mir leid, ich wollte dich nicht belehren. Aber diesen Fehler sieht man inzwischen so oft, dass ich ein wenig gegensteuern musste Laufzeit-Packages verwenden und Haken gesetzt , funktioniert. Laufzeit-Packages verwenden und Haken nicht gesetzt , Fehlermeldungen. Von welchem Haken redest du jetzt? Soweit ich weiß, musst du nur die Haken bei "Dynamische RTL" und "Laufzeit-Packages" entfernen, dann sollte es gehen. Und du hast ja auch geschrieben, dass es dann funktioniert. Zitieren
aLeXanDer.. Geschrieben 14. Juli 2008 Autor Geschrieben 14. Juli 2008 Ich dachte das man alle diese Optionen "deaktivieren" muss um eine .exe zu kompilieren, die auf einem Rechner ohne jedliche dlls läuft. Zitieren
Klotzkopp Geschrieben 14. Juli 2008 Geschrieben 14. Juli 2008 Ich dachte das man alle diese Optionen "deaktivieren" muss um eine .exe zu kompilieren, die auf einem Rechner ohne jedliche dlls läuft.Ja. Und genau das habe ich geschrieben: Du sollst die Haken an diesen Optionen entfernen. Genau das bedeutet doch deaktivieren. Oder siehst du das anders? Ich verstehe immer noch nicht, wo das Problem ist. Zitieren
aLeXanDer.. Geschrieben 14. Juli 2008 Autor Geschrieben 14. Juli 2008 Ich glaube wir meinen beide dasselbe aber reden trotzdem aneinander vorbei. Also ich habe ja bei all diesen Optionen den Haken entfernt, also deaktiviert. Aber dann erhalte ich ja die Linker-Fehlermeldungen. Das Programm lässt sich nicht Compilieren. Mit dem Haken bei der Option "Laufzeit-Packages verwenden", also Haken nicht entfernt, compiliert das Programm, aber man benötigt auf dem Fremdrechner die DLLs, was ich aber nicht will. Ich hoffe jetzt ist das Problem eindeutig. Zitieren
aLeXanDer.. Geschrieben 14. Juli 2008 Autor Geschrieben 14. Juli 2008 Wenn ich das ganze nicht als Winapi mache sondern ne ganz normale VCL-Anwendung mit Formular erhalte ich keine Fehler Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.