0

有没有办法在我的 C# 应用程序中使用(引用)用非托管 C++(不是 COM 库)编写的 DLL?

当我尝试从 Visual Studio 中引用它时,我收到“不是 COM 对象”错误消息。

也许有某种翻译器\路由器可以 COMify 我的 DLL 参考?我不知道 COM 和 COM 互操作是如何工作的,因为我在这对我来说已经没有必要的时候就开始编程了。

谢谢你。

4

3 回答 3

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);
于 2009-01-24T13:56:25.810 回答
5

请参阅 MSDN 上的“使用非托管 DLL 函数”主题:

http://msdn.microsoft.com/en-us/library/26thfadc.aspx

无需添加任何 COM 代理,.NET 可以使用[DllImport]属性直接使用 DLL。通过指定附加属性,您还可以完全控制 .NET 和非托管 DLL 之间的编组。

于 2009-01-24T13:54:02.553 回答
2

Joe 已经回答了这个问题,所以我要继续解决这个问题 - 为了节省自己一些时间,而不必挖掘和破坏函数签名,P/Invoke 有一个非常完整的 Win32 签名库,以 wiki 的形式还有一个 Visual Studio 插件!

在P/Invoke上查看

于 2009-01-29T12:05:04.113 回答