2012-12-25 13 views
6

LO SCENARIO:Impossibile aggiungere riferimento a WinRT C++ progetto DLL

Sto facendo un [edit: WinRT native] progetto C++ Direct X DLL per applicazioni Windows Store in base alla "Direct3D App" codice di Visual Studio campione.

Questo deve essere un progetto DLL separato dal mio progetto di app di Windows Store perché userò il mio XAML UserControl con il renderer di Direct X al suo interno sia nell'app di Windows 8 Metro sia nella versione di Windows Phone dell'app.

IL PROBLEMA:

non posso riferire il progetto C++ nel progetto applicazione C# Windows Store. Visual Studio rifiuta con le seguenti parole:

A reference to <project-name> could not be added. 

che ho visto suggerimenti per compilare il progetto C++ utilizzando il flag/CLR, ma questo non è compatibile con:

  • il flag/ZW richiesto dalla alcune API all'interno del progetto
  • il "wrl.h" header
  • una moltitudine di altri flag della riga di comando nelle impostazioni di progetto

Quindi il flag/clr non sembra essere un'opzione in questa situazione.

LA DOMANDA:

Come posso fare riferimento al progetto C++ in modo che posso utilizzare il mio renderer XAML Direct X all'interno del progetto C# Windows Store App? O c'è un'alternativa migliore?

Grazie in anticipo.

risposta

6

Ho risolto il problema ricreando il progetto C++ come progetto Windows Runtime Component. Inizialmente avevo creato il progetto dal modello Class Library (Windows Store apps). Deve essere che il modello Win RT ha alcune impostazioni di configurazione che gli permettono di funzionare.

Dopo aver apportato questa modifica, il progetto potrebbe essere aggiunto come riferimento nel progetto C#.

È a causa della risposta di @ user1610015 che ho realizzato che stavo sviluppando in realtà codice nativo di Win RT, codice non gestito, che mi ha portato a provare questa soluzione - grazie!

4

Il flag /ZW è per progetti C++/CX. C++/CX è quasi identico nella sintassi al C++ gestito (C++/CLI), tranne che C++/CX è completamente non gestito. Questo potrebbe essere ciò che ti ha fatto pensare che stavi sviluppando C++ gestito, quando in realtà non lo eri.

Non ho usato C++/CX, ma da quello che ho sentito, le classi di Windows Runtime sono classi COM. Quindi penso che tu possa usare lo strumento TlbImp.exe da Windows SDK per creare una DLL gestita dalla tua DLL non gestita, che puoi quindi fare riferimento dal tuo progetto C#. Provalo e fammi sapere se funziona.

Un'altra opzione è parlare con Windows Runtime senza C++/CX. Mentre C++/CX rende la programmazione di Windows Runtime molto più semplice, non è strettamente necessaria. Puoi anche usare la libreria WRL. Poiché la libreria WRL è pura C++, dovrebbe essere utilizzabile anche da C++/CLI.

+0

Grazie per queste informazioni: non avevo idea che non stavo sviluppando codice non gestito. Non ho finito per dover provare Tlbimp.exe - vedere la mia risposta sopra. – Brett

+0

@Brett niente dice grazie meglio di un upvote ... – thumbmunkeys

+0

@pivotnig right, done :) – Brett

Problemi correlati