有沒有辦法在我的C#應用程序中使用(引用)在非託管C++(而不是COM庫)中編寫的DLL?有沒有辦法從C#應用程序調用非託管(而不是COM)dll?
當我嘗試從Visual Studio中引用它時,我得到'不是COM對象'的錯誤消息。
也許有某種翻譯\路由器會COMify我的DLL引用? 我不知道如何COM和COM互操作,因爲我開始編程時,這已經不必要了。
謝謝。
有沒有辦法在我的C#應用程序中使用(引用)在非託管C++(而不是COM庫)中編寫的DLL?有沒有辦法從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);
見 「消費非託管的DLL函數」 在MSDN主題:
http://msdn.microsoft.com/en-us/library/26thfadc.aspx
無需添加任何COM代理,.NET可以消耗直接使用函數[DllImport]屬性的DLL 。通過指定其他屬性,您還可以完全控制.NET和非託管DLL之間的編組。
喬已經回答了這一點,所以我要釘本上 - 給自己節省一些時間,不必挖掘和碾壓函數簽名,P/Invoke的有一個非常完整的Win32簽名庫,以wiki和Visual Studio插件的形式出現!
看看P/Invoke
什麼是[return:]標記的用途? -g – greg7gkb 2009-01-29 19:41:21