2009-07-09 7 views
1

Ich versuche, eine DLL im gemischten Modus zu schreiben, nennen wir es "Client", um einige nicht verwaltete Klassen durch ihre verwalteten Äquivalente zu ersetzen. Alles funktioniert gut auf meinem persönlichen Computer, aber wenn ich den Quellcode einchecke, wird unser Build-Rechner das Projekt nicht erstellen. Es erkennt die verwalteten Klassen nicht, die ich aus einer anderen DLL namens "Core" verwende.C++/CLI vorkompilierte Header: Wie funktionieren sie?

Ich denke, das Problem hat mit vorkompilierten Headern zu tun. Hier ist warum:

Um die Klassen von 'Core' zu verwenden, habe ich einen Verweis auf das 'Core' Projekt im 'Client' Projekt hinzugefügt. Wenn ich diesen Verweis entferne und dann das Projekt auf meinem persönlichen Computer erstelle, funktioniert es immer noch. Der CLR PCH kompiliert jedoch nicht nach dem Entfernen der Referenz. Wenn ich das CLR PCH neu kompiliere und das Projekt dann kompiliere, schlägt es mit denselben Fehlern fehl, die ich auf dem Erstellungscomputer erhalte: die verwalteten Klassen werden nicht erkannt.

Es scheint mir, dass die verwalteten Klassen von DLLs, die Sie importieren, im vorkompilierten Header definiert sind. Ich konnte das nicht bestätigen, aber das ist die beste Schätzung, die ich habe. Hat jemand einen Einblick in dieses Thema? Werden Projektreferenzen in gemischten DLLs gelöst, indem Haken in den verwalteten PCH eingefügt werden?

Schritte

Im Folgenden zum Reproduzieren für mich keinen Sinn macht:

  1. Erhalten Sie zu bauen-Client.
  2. Entfernen Sie die Referenz vom Client zum Core. Kompilieren Sie den Client. Client STILL baut. Dies ist nicht zu erwarten.
  3. Kompilieren Sie den Client PCH erneut, und kompilieren Sie den Client. Compile Client schlägt fehl: Die Klassen in 'Core' sind nicht definiert. Dies ist das erwartete Verhalten.
  4. Referenz zu Core hinzufügen, kompilieren. Compile Client schlägt aus dem gleichen Grund fehl. Dies wird nicht erwartet
  5. Kompilieren Sie den Client PCH erneut, dann kompilieren Sie den Client. Client kompiliert gut.

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

Antwort

0

Es gibt eine andere Möglichkeit, Referenzen zu einer verwalteten/gemischten Modus Dll in C++/CLI hinzuzufügen - es ist # using Core.dll zum Client hinzuzufügen. Dies könnte Ihr Build-Problem lösen.

0

Es kann nicht so funktionieren, weil Sie keinen vorkompilierten Header verwenden müssen.
Mit einem PCH können Sie den Build beschleunigen.
Es tut nichts besonderes mit Referenzen .....

+0

einmal alle und eine Weile beim Kompilieren, kann ich einen Fehler: #using fehlgeschlagen auf „... core.dll“ Wenn ich einen Doppelklick auf htis Fehler es mich verweist auf den CPP-Datei des PCH. Deshalb denke ich, es bringt die Referenzen in den PCH. –

+0

Was würde es dann tun, wenn Ihr Projekt überhaupt keinen PCH hätte? Sind Sie sicher, dass Ihre Projektabhängigkeiten korrekt eingerichtet sind? d. h. der Projektclient hängt vom Projektkern ab. Könnte dies auch ein Debug/Release-Problem sein? Check out http://support.microsoft.com/kb/843407 – demoncodemonkey

+0

Es ist definitiv kein Debug/Release-Problem. Die Registerkarte "Projektreferenzen" ignoriert den Debug-Modus im Gegensatz zum Release-Modus. –

Verwandte Themen