有没有办法从C#应用程序调用非托管(非COM)dll? 有没有方法可以引用(引用)在我的C语言应用程序中非托管C++(不是COM库)中编写的DLL?< /P>

有没有办法从C#应用程序调用非托管(非COM)dll? 有没有方法可以引用(引用)在我的C语言应用程序中非托管C++(不是COM库)中编写的DLL?< /P>,c#,c++,interop,unmanaged,marshalling,C#,C++,Interop,Unmanaged,Marshalling,当我尝试从VisualStudio中引用它时,会收到“NotaCOM对象”错误消息 也许有某种翻译器\路由器会使我的DLL引用更有趣? 我不知道COM和COM互操作是如何工作的,因为我开始编程时,这对我来说已经不必要了 谢谢。请参阅MSDN上的“使用非托管DLL函数””主题: 无需添加任何COM代理,.NET可以使用[DllImport]属性直接使用DLL。您还可以通过指定其他属性来完全控制.NET和非托管DLL之间的封送。您需要使用DllImport属性。以下是Win32 PostMessa

当我尝试从VisualStudio中引用它时,会收到“NotaCOM对象”错误消息

也许有某种翻译器\路由器会使我的DLL引用更有趣? 我不知道COM和COM互操作是如何工作的,因为我开始编程时,这对我来说已经不必要了

谢谢。

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


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

您需要使用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);

Joe已经回答了这个问题,所以我将继续讨论这个问题-为了节省您的时间,并且不必挖掘和破坏函数签名,p/Invoke有一个相当完整的Win32签名库,以wiki和Visual Studio插件的形式


请访问

查看[return:]标签的作用是什么-在本例中,它指定MarshalAs属性应用于函数的返回值。