Warum brauche ich die vcl.h in einem DLL Project



  • Hallo,

    ich habe ein DLL Projekt. Benutze dort aber keine VCL Komponenten. Sobald ich das include vcl.h auskommentiere bringt der Compiler mir Linker Fehler wie z.B.:

    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__ClassCreate' referenziert von C:\PROGRAMME\CODEGEAR\RAD STUDIO\5.0\LIB\CP32MT.LIB|xx
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__BeforeDestruction' referenziert von C:\PROGRAMME\CODEGEAR\RAD STUDIO\5.0\LIB\CP32MT.LIB|xx
    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__fastcall System::AnsiString::~AnsiString()' referenziert von C:\PROGRAMME\CODEGEAR\RAD STUDIO\5.0\LIB\CP32MT.LIB|xx
    

    Bei der dritten Fehlermeldung hab ich gedacht es liegt daran das ich doch irgendwo einen AnsiString benutze aber ich habe alle Dateien durchsucht es gibt keinen.

    Wie kann ich die Komponenten finden die diese Fehler verursachen?

    MfG



  • Hallo

    Offenbar benutzt du doch irgendwo eine Klasse aus der VCL, die indirekt auch AnsiString benutzt. Es ist sehr wohl möglich mit dem Builder DLLs ohne VCL zu erstellen.

    bis bald
    akari



  • die frage ist wie finde ich diese Komponenten?

    Es bringt mir ja nur Linker Fehler und keine Compiler Fehler.

    Ich habe zum Beispiel meine ganze Projektmappe nach AnsiString durchsucht und nix gefunden.

    Ich versteh halt nicht warum der Compiler nicht meckert von wegen ich kenne die und die Funktion nicht.

    MfG



  • Destiniy schrieb:

    Ich versteh halt nicht warum der Compiler nicht meckert von wegen ich kenne die und die Funktion nicht.

    Der Compiler zeigt an, welches Modul den nicht auflösbaren Import verlangt. Hättest du irgendwo AnsiString verwendet, dann stünde dein Modul da; hier ist das offensichtlich nicht der Fall, sondern die cp32mt.lib, der statische Part der Laufzeitbibliothek, referenziert einige Funktionen aus der VCL. Das läßt darauf schließen, daß du ein DLL-Projekt mit VCL-Unterstützung erstellt hast; ein solches Projekt muß dann auch gegen eine VCL-Bibliothek linken (was mittels eines #pragma link o.ä. automatisch passiert, sobald du vcl.h irgendwo einbindest).



  • und wie kann ich das mit der vcl unterstützung rausnehmen?

    MfG



  • Ein neues Projekt erstellen, das entsprechende Häkchen im DLL-Wizard nicht setzen und alle Dateien des alten Projektes hinzufügen.



  • gibt es da keine einfachere Variante.

    da muß es doch auch einen Haken in den einstellungen geben oder das man einfach das Projektfile mit dem Texteditor öffnet und den haken setzt?

    MfG



  • habs

    ich mußte im Projektfile mit dem Texteditor die Zeile <NoVCL>true</NoVCL> in der Basisgruppe hinzufügen.

    <PropertyGroup Condition="'$(Base)'!=''">
    .
    .
    .
    <NoVCL>true</NoVCL>
    .
    .
    .
      </PropertyGroup>
    

    MfG


Anmelden zum Antworten