Zum Inhalt springen

BorlandDatabaseEngine NetDir-Pfad setzen in StandAlone .Exe


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nun erhalte ich folgende Fehler
Das 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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Komm vom Dorf da tut man schon mal haken und hacken verwechseln
Tut 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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube wir meinen beide dasselbe aber reden trotzdem aneinander vorbei.

:D

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...