Domanda

Vorrei creare un progetto C # e implementare il codice nativo (C ++) esistente. Qualcuno sa qualche buon tutorial a riguardo?

Grazie!

È stato utile?

Soluzione

Puoi usare P / Invoke e puoi chiamare metodi non gestiti. Ti posterò alcuni esempi: Questo è un riferimento alla documentazione ufficiale MSDN. Questo è un sito Web gestito dalla community con la maggior parte delle librerie non gestite comuni di Windows insieme a firme e esempi di metodi

Altri suggerimenti

Se il tuo codice C ++ è gestito (come dici tu), allora ti suggerisco di lasciarlo come C ++ a meno che tu abbia un'ottima ragione per - futuri assiemi C # (ecc.) dovrebbe essere in grado di fare riferimento solo "così com'è".

Suppongo che implementi il ??codice esistente intendi che vuoi chiamarlo da C #, con modifiche minime al codice C ++.

Sono un fan e un recente acquirente del libro C ++ / CLI in Action che ha un paio di utili capitoli di esempio online.

Questa intro su CodeProject è un buon punto di partenza.

L'autore di C ++ / CLI in Action ha una serie di articoli su CodeProject, scorrere fino alla sezione C ++ / CLI su il suo indice .

L'articolo di Wikipedia su P / Invoke ha una serie di motivi per cui potresti non voler usare questo approccio, con il quale concordo:

  • perdita del supporto per la digitazione da parte del compilatore
  • possibili tipi di dati o problemi di allineamento poiché è necessario mapparli manualmente
  • è necessario aggiungere oggetti raccolti nell'immondizia

Il miglior punto di partenza su MSDN è articolo di riepilogo .

Probabilmente il modo più semplice per farlo è creare un progetto C ++ / CLI, che ti permetterà di mescolare C ++ gestito e non gestito. È quindi possibile racchiudere le classi C ++ non gestite esistenti con un wrapper .Net gestito che il codice C # può chiamare direttamente. La rivista MSDN ha un buon articolo su C ++ / CLI. p>

L'interoperabilità sarà davvero utile solo per chiamare le funzioni in stile C. Non puoi davvero usarlo per interagire con classi C ++ pure.

L'ho imparato facendolo, quindi non ho un buon tutorial, ma ci sono un paio di cose di cui devi essere consapevole: C ++ e C ++ / CLI gestiti si integrano entrambi con codice non gestito con pochissime cuciture brutte. Questo non è il caso di C #. Nel C ++ gestito, è del tutto possibile fare qualcosa del genere:

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

mentre in C # dovresti P / Invoke in SetWindowText - non che lo faresti davvero: è solo un semplice esempio, ma devi essere consapevole che il compilatore C ++ gestito è una strana combinazione di fare molto interoperabilità per te in modo trasparente e non fare nulla per te allo stesso tempo (cioè, non comporterà il marashalling implicito).

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