2009-01-24 7 views
0

Existe-t-il un moyen d'utiliser (référence) une DLL écrite dans un C++ non géré (pas une bibliothèque COM) dans mon application C#?Existe-t-il un moyen d'appeler une DLL non gérée (non COM) à partir de l'application C#?

Lorsque j'essaie de référencer à partir de Visual Studio, je reçois un message d'erreur «pas un objet COM».

Peut-être qu'il y a une sorte de traducteur \ routeur qui COMIFIERait ma référence DLL? Je n'ai aucune idée de comment fonctionne COM et COM interop, depuis que j'ai commencé à programmer quand c'était déjà inutile pour moi.

Merci.

Répondre

7

Vous devez utiliser l'attribut DllImport. Voici un exemple pour la fonction PostMessage Win32:

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

Quel est le [retour:] balise pour? -g – greg7gkb

+0

Dans cet exemple, il indique que l'attribut MarshalAs s'applique à la valeur de retour de la fonction. – Joe

5

Voir "Consommant fonctions DLL non gérés" de sujet sur MSDN:

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

Il n'y a pas besoin d'ajouter un proxy COM, .NET peut consommer DLL en utilisant directement le [DllImport] attribut . Vous avez également un contrôle total sur le marshalling entre .NET et la DLL non managée en spécifiant des attributs supplémentaires.

2

Joe a déjà répondu à cela, donc je vais virer de bord ce sur - pour vous faire gagner du temps et de ne pas avoir à déterrer et les signatures de fonction mangle, P/Invoke a une bibliothèque assez complète de signatures Win32, sous la forme d'un wiki et d'un plugin Visual Studio!

Check it out à P/Invoke

Questions connexes