Est-il possible d'appeler une dll non gérée (pas COM) à partir d'une application C #?
-
19-08-2019 - |
Question
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 #?
Lorsque j'essaie de le référencer à partir de Visual Studio, le message d'erreur "pas un objet COM" s'affiche.
Peut-être y a-t-il une sorte de traducteur / routeur qui pourrait COMify ma référence de DLL? Je ne sais pas du tout comment COM et COM interop fonctionnent, depuis que j'ai commencé à programmer alors que c'était déjà inutile pour moi.
Merci.
La solution
Vous devez utiliser l'attribut DllImport. Voici un exemple pour la fonction Win32 PostMessage:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);
Autres conseils
Voir " Consommer des fonctions DLL non gérées ". sujet sur MSDN:
http://msdn.microsoft.com/en-us/library /26thfadc.aspx
Il n'est pas nécessaire d'ajouter de proxy COM. .NET peut utiliser des DLL directement à l'aide de l'attribut [DllImport] . Vous avez également un contrôle total sur le marshalling entre .NET et la DLL non gérée en spécifiant des attributs supplémentaires.
Joe a déjà répondu à cette question. Je vais donc ajouter quelque chose - pour gagner du temps et éviter de creuser et de modifier les signatures des fonctions, P / Invoke possède une bibliothèque assez complète de signatures Win32, sous la forme: à la fois un wiki ET un plugin Visual Studio!
Découvrez-le à l'adresse P / Invoke
.