有没有办法在我的C#应用程序中使用(引用)非托管C ++(不是COM库)编写的DLL?
当我尝试从Visual Studio中引用它时,我得到'不是COM对象'错误消息。
也许有某种翻译器\路由器可以合并我的DLL参考? 我不知道COM和COM互操作是如何工作的,因为我开始编程的时候对我来说已经没有必要了。
谢谢。
答案 0 :(得分:7)
您需要使用DllImport属性。以下是Win32 PostMessage函数的示例:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool PostMessage(IntPtr handle, int message, IntPtr wparam, IntPtr lparam);
答案 1 :(得分:5)
请参阅MSDN上的“使用非托管DLL函数”主题:
http://msdn.microsoft.com/en-us/library/26thfadc.aspx
不需要添加任何COM代理,.NET可以使用 [DllImport] 属性直接使用DLL。您还可以通过指定其他属性来完全控制.NET与非托管DLL之间的编组。
答案 2 :(得分:2)
Joe已经回答了这个问题,所以我要解决这个问题 - 为了节省一些时间而不必挖掘和破坏功能签名,P / Invoke有一个非常完整的Win32签名库,形式为:一个wiki和一个Visual Studio插件!
上查看