Domanda

Esiste un modo per utilizzare (riferimento) una DLL scritta in un C ++ non gestito (non una libreria COM) nella mia applicazione C #?

Quando provo a fare riferimento a esso da Visual Studio, viene visualizzato il messaggio di errore "Non un oggetto COM".

Forse esiste un qualche tipo di traduttore \ router che potrebbe COMIFICARE il mio riferimento DLL? Non ho idea di come funzionino l'interoperabilità COM e COM, da quando ho iniziato a programmare quando ciò non era già necessario per me.

Grazie.

È stato utile?

Soluzione

Devi usare l'attributo DllImport. Ecco un esempio per la funzione PostMessage di Win32:

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);

Altri suggerimenti

Vedi " Uso di funzioni DLL non gestite " argomento su MSDN:

http://msdn.microsoft.com/en-us/library /26thfadc.aspx

Non è necessario aggiungere alcun proxy COM, .NET può utilizzare le DLL direttamente utilizzando l'attributo [DllImport] . Hai anche il pieno controllo del marshalling tra .NET e la DLL non gestita specificando attributi aggiuntivi.

Joe ha già risposto a questo, quindi ho intenzione di affrontarlo: per risparmiare un po 'di tempo e non dover scavare e manipolare le firme delle funzioni, P / Invoke ha una libreria abbastanza completa di firme Win32, sotto forma di sia un wiki che un plug-in Visual Studio!

Dai un'occhiata a P / Invoke

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