Buon pomeriggio,PInvoke sbilancia lo stack
Ho lavorato su una dll che può utilizzare CORBA per comunicare a un'applicazione che è la rete a conoscenza. Il codice funziona bene se lo eseguo come un'applicazione di console C++. Tuttavia, mi sono bloccato sull'esportazione dei metodi come dll. I metodi sembrano esportare bene e, se chiamo un metodo senza parametri, funziona come previsto. Sono bloccato dal passaggio di una stringa C# a un metodo C++.
mio C metodo intestazione ++ si presenta così:
bool __declspec(dllexport) SpiceStart(char* installPath)
mio codice C# DLL di importazione è la seguente:
[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)]
private static extern bool SpiceStart(string installPath);
chiamo il metodo in questo modo:
bool success = SpiceStart(@"c:\sedatools");
Il chiamata a SpiceStart genera l'eccezione "PInvokeStackImbalance", che "è probabile perché la firma PInvoke gestita non abbinare la firma del target non gestito. "
Qualcuno ha qualche suggerimento? Se rimuovo il char * e la stringa dai parametri, il metodo funziona perfettamente. Tuttavia, mi piacerebbe essere in grado di passare il percorso di installazione dell'applicazione alla DLL da C#.
Grazie in anticipo,
Giawa
+1. O specificare la convenzione di chiamata in DllImportAttribute. –
Perfetto - Questo ha fatto il lavoro! Grazie – Giawa