Frage

Ich versuche, eine Mixed-Mode-DLL zu schreiben, nennen wir es "Client", um einige nicht verwaltete Klassen durch ihre verwalteten Äquivalente zu ersetzen. Auf meinem persönlichen Computer funktioniert alles einwandfrei, aber wenn ich den Quellcode in den Quellcode überprüfe, wird unser Build -Computer das Projekt nicht erstellen. Es erkennt die verwalteten Klassen, die ich von einer anderen DLL verwende, nicht als "Kern".

Ich denke, das Problem hat mit vorkompilierten Kopfzeilen zu tun. Hier ist der Grund:

Um die Klassen aus "Core" zu verwenden, habe ich im Projekt "Client" einen Verweis auf das "Kern" -Projekt hinzugefügt. Wenn ich diese Referenz entferne und dann das Projekt auf meiner persönlichen Maschine baue, funktioniert es immer noch. Der CLR PCH kompilieren jedoch nicht nach dem Entfernen der Referenz. Wenn ich das CLR PCH neu kompile und dann das Projekt zusammenstelle, fällt es mit den gleichen Fehlern, die ich auf die Build -Maschine bekomme, fehl. Die verwalteten Klassen werden nicht erkannt.

Es scheint mir, dass die verwalteten Klassen aus DLLs Import im vorkompilierten Header definiert sind. Ich konnte dies nicht überprüfen, aber das ist die beste Vermutung, die ich habe. Hat jemand einen Einblick, den er zu diesem Thema abgeben kann? Werden Projektreferenzen in gemischten DLLs gelöst, indem sie Haken in den verwalteten PCH einstellen?

Schritte zum Reproduzieren

Das Folgende macht für mich keinen Sinn:

  1. Kunden zum Erstellen bringen.
  2. Entfernen Sie die Referenz vom Client auf Kern. Client kompilieren. Der Kunde baut immer noch auf. Dies wird nicht erwartet.
  3. Kompilieren Sie den Client PCH neu und kompilieren Sie den Client. Compile -Client fällt fehl: Die Klassen in 'Core' sind undefiniert. Dies ist erwartetes Verhalten.
  4. Fügen Sie Referenz auf Kern hinzu, kompilieren Sie. Compile Client schlägt aus dem gleichen Grund fehl. Dies wird nicht erwartet
  5. Kompilieren Sie den Client PCH neu und kompilieren Sie den Client. Client kompiliert gut.

Meine Schlussfolgerung aus diesem Experiment ist, dass die Referenzen über vorkundige Header in das Projekt eingefügt werden und dass etwas mit der Art und Weise, wie dies funktioniert, gebrochen wird, zumindest auf unserer Build -Maschine.

War es hilfreich?

Lösung

Es gibt eine andere Möglichkeit, in C ++ / CLI einen verwalteten / gemischten Modus -DLL hinzuzufügen. Dies kann Ihr Build -Problem lösen.

Andere Tipps

Es kann nicht so funktionieren können, weil Sie keinen vorkompilierten Header verwenden müssen.
Alles, was ein PCH tut, ist es, den Build zu beschleunigen.
Es macht nichts Besonderes mit Referenzen .....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top