Raccomanderei di farlo in modo documentato invece di affidarsi a un hack non documentato di un autore che non fornisce supporto. Facciamo un esempio:
namespace Publics {
public class Class1 {
public static void Run() {
// Stuff...
}
}
}
Aggiungi una nuova libreria di classi C++/CLI al tuo progetto. Fare clic con il tasto destro del mouse sulla soluzione, Aggiungi, Nuovo progetto. Aprire il nodo "Altre lingue", Visual C++, CLR e selezionare il modello di progetto "Libreria di classi". Fare clic con il tasto destro del mouse sul nuovo progetto, Proprietà, Proprietà comuni, Framework e Riferimenti, quindi fare clic sul pulsante Aggiungi nuovo riferimento. Dalla scheda Progetti, seleziona il progetto C# di cui vuoi esportare i metodi.
Eliminare la classe vuota pre-compilata con la TODO commento // e scrivere questo tipo di codice:
extern "C" __declspec(dllexport)
void __stdcall Example()
{
Publics::Class1::Run();
}
generare la soluzione. Verificare che la funzione Example sia stata esportata eseguendo dumpbin.exe/exports nella DLL.Si dovrebbe vedere qualcosa di simile a questo:
1 0 00001020 [email protected] = [email protected]
Al di là del nome e la convenzione di chiamata, ora avete anche un sacco di opzioni per ottimizzare la funzione esportata. Se si desidera esportare un metodo di istanza, invece di un metodo statico si potrebbe scrivere la funzione in questo modo, per esempio:
extern "C" __declspec(dllexport)
void __stdcall Example()
{
Publics::Class1^ obj = gcnew Publics::Class1;
obj->Run();
}
Etcetera, una certa familiarità con il linguaggio C++/CLI è necessario se si sta andando a rendere questo elaborato . Ultimo ma non meno importante, è anche probabile che tu scopra cosa è andato storto nel tuo tentativo originale di far funzionare il rewriter di Giesecke. In caso contrario utilizza la stessa identica tecnica utilizzata dal compilatore C++/CLI per esportare il metodo gestito.
È inoltre possibile utilizzare http://www.dependencywalker.com/ per visualizzare le funzioni esportate. Ho usato l'approccio sopra prima, ma è difficile dire cosa potrebbe andare storto senza ulteriori informazioni. Probabilmente sarà necessario vedere l'intero progetto per eseguire il debug di ciò che sta andando storto. –