Gibt es eine Möglichkeit, einen nicht verwaltete (nicht COM) DLL aus C # -Anwendung zu nennen?
-
19-08-2019 - |
Frage
Gibt es eine Möglichkeit (Referenz) eine DLL in einer nicht verwalteten C geschrieben ++ zu verwenden (keine COM-Bibliothek) in meiner C # -Anwendung?
Wenn ich versuche, es zu verweisen in Visual Studio, ich ‚nicht eine COM-Objekt‘ Fehlermeldung an.
Vielleicht gibt es eine Art Übersetzer \ Router, die meine DLL Referenz COMify würde? Ich habe keine Ahnung, wie COM und COM-Interop-Arbeit, da ich die Programmierung begonnen, wenn das für mich schon unnötig war.
Danke.
Lösung
Sie müssen das DllImport Attribut verwenden. Hier ist ein Beispiel für die Win32-Funktion Postmessage:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);
Andere Tipps
Siehe " Verbrauchen nicht verwaltete DLL-Funktionen " Thema auf MSDN:
http://msdn.microsoft.com/en-us/library /26thfadc.aspx
Es gibt keine Notwendigkeit, all COM-Proxy hinzufügen, kann .NET-DLLs verbraucht direkt das mit [DllImport] Attribute. Sie haben auch die volle Kontrolle über die Rangierung zwischen .NET und nicht verwaltete DLL durch zusätzliche Attribute angeben.
Joe bereits beantwortet diese, so dass ich dies auf dem Gehen heften - sich etwas Zeit zu sparen und nicht zu graben und mit mangle Funktionssignaturen, P / Invoke hat eine ziemlich vollständige Bibliothek von Win32 Signaturen in Form von sowohl ein Wiki und ein Visual Studio-Plugin!
Überprüfen Sie es heraus unter P / Invoke