GUID-Definition in merhfach verwendetem Header



  • Hallo,

    ich versuche einen DirectShow-Filter von Desktop-Windows auf Windows Mobile zu portieren. Das Beispiel-Projekt (mit Projektdatei) für Windows kompiliert dabei problemlos. Nach dem erstellen eines Windows-Mobile Projekts und dem einbinden der entsprechenden Header und Bibliotheken bleibt folgendes Problem:

    In einer Headerdatei des Projekts sind GUIDs für COM definiert:

    DEFINE_GUID(CLSID_xyz, 0x000000ce, ... );
    

    Das Problem ist, daß CLSID in mehreren Quelltextdateien benötigt werden und so das entprechende Headerfile mehrfach eingebunden wird.

    Das Kompilieren geht soweit gut, da die Variablen an der entprechenden Stelle bekannt sind, nur der Linker meldet einen Fehler:

    error LNK2005: CLSID_xyz ist bereits in maindll.obj definiert.
    

    Der Fehler ist klar, da die GUID-Definition ja tatsächlich in mehrere CPP-Dateien inkludiert wurde und die entsprechenden .obj-Dateien die GUID neu definieren.

    Im ursprünglichen Projekt war der Code allerdings problemlos zu kompilieren und zu linken. Ich gehe davon aus, daß man das dem Linker oder dem Complier irgendwie klarmachen kann, weiß aber nicht, was die entsprechende Option ist.

    Ich hoffe jemand kann mir helfen!



  • Mit
    #pragma once
    wird der Header nur einmal eingebunden pro Compilieren.



  • #pragma once steht im Header.
    Das Kompilieren funktioniert wie gesagt ja auch. Das Problem ist, daß die Definition in jedem kompilierten OBJ-File vorliegt und der Linker sich verständlicherweise darüber beschwert!


Anmelden zum Antworten