Domanda

Ho una domanda veloce sull'esecuzione di un'applicazione directX (C ++) in un ambiente gestito. Sto tentando di scrivere uno strumento MDI (in C #) in cui lo sfondo della finestra principale sarebbe una finestra di rendering incorporata di directX (C ++).

Ho letto i modi che comportavano la scrittura del C ++ in una dll nativa, tuttavia sarebbe preferibile poter includere i progetti C ++ nella soluzione (non so nemmeno se ciò sia possibile). Ad ogni modo, se conosci alcuni passaggi utili, suggerimenti o se questa è una cattiva idea in generale, per favore fatemelo sapere. Grazie!

È stato utile?

Soluzione

Il modo più semplice per farlo sarebbe quello di aggiungere un progetto C ++ / CLI alla tua soluzione. Ciò ti consentirebbe quindi di utilizzare direttamente le interfacce COM di DirectX e creare un wrapper gestito che è facile da chiamare dal tuo codice C #. Ho adottato questo approccio alcune volte ed è di gran lunga il modo più semplice di mescolare DirectX e .Net che abbia mai provato. Managed DirectX era un'opzione, ma non è più supportato ed era comunque un sottoinsieme abbastanza piccolo dell'API COM completa.

Altri suggerimenti

Prima di tutto scrivere la parte C ++ in un diverso file dll non significa che non potrebbe essere la stessa soluzione del progetto C #.

Per utilizzare DX nativo per il rendering su una finestra gestita è necessario passare l'ID della finestra HWND (utilizzare form.WindowId.ToInt32) al cevor D3Ddevice C ++ D3. successivamente ogni volta che eseguirai il rendering utilizzando quel dispositivo, verrebbe visualizzato nella finestra .NET.

Per fare questo probabilmente avrai bisogno di due progetti saparate - una DLL C ++ & amp; Progetto .NET. usa il wrapper COM o p-invoke per passare l'HWND alla DLL C ++.

Se non vuoi passare troppo tempo a scrivere codice C ++ per DirectX, puoi prendere in considerazione l'utilizzo SlimDX , dal momento che Managed DirectX 1.0 è fuori discussione, dove come 2.0 non esce mai dalla beta e successivamente sostituisce con XNA che è abbastanza diverso da DirectX stesso e richiede l'installazione di XNA Game Studio

SlimDX è la versione opensource di directx gestito con API e struttura interna leggermente diverse, ma è facile da uso. La versione recentemente rilasciata è molto stabile. Attualmente lo sto usando per scrivere un'applicazione di produzione.

SlimDX

DirectX gestito

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top