有没有办法在我的 C# 应用程序中使用(引用)用非托管 C++(不是 COM 库)编写的 DLL?
当我尝试从 Visual Studio 中引用它时,我收到“不是 COM 对象”错误消息。
也许有某种翻译器\路由器可以 COMify 我的 DLL 参考?我不知道 COM 和 COM 互操作是如何工作的,因为我在这对我来说已经没有必要的时候就开始编程了。
谢谢你。
有没有办法在我的 C# 应用程序中使用(引用)用非托管 C++(不是 COM 库)编写的 DLL?
当我尝试从 Visual Studio 中引用它时,我收到“不是 COM 对象”错误消息。
也许有某种翻译器\路由器可以 COMify 我的 DLL 参考?我不知道 COM 和 COM 互操作是如何工作的,因为我在这对我来说已经没有必要的时候就开始编程了。
谢谢你。
您需要使用 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);
请参阅 MSDN 上的“使用非托管 DLL 函数”主题:
http://msdn.microsoft.com/en-us/library/26thfadc.aspx
无需添加任何 COM 代理,.NET 可以使用[DllImport]属性直接使用 DLL。通过指定附加属性,您还可以完全控制 .NET 和非托管 DLL 之间的编组。
Joe 已经回答了这个问题,所以我要继续解决这个问题 - 为了节省自己一些时间,而不必挖掘和破坏函数签名,P/Invoke 有一个非常完整的 Win32 签名库,以 wiki 的形式还有一个 Visual Studio 插件!
在P/Invoke上查看