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.

Était-ce utile?

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

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top