2009-01-24 26 views
0

有沒有辦法在我的C#應用​​程序中使用(引用)在非託管C++(而不是COM庫)中編寫的DLL?有沒有辦法從C#應用程序調用非託管(而不是COM)dll?

當我嘗試從Visual Studio中引用它時,我得到'不是COM對象'的錯誤消息。

也許有某種翻譯\路由器會COMify我的DLL引用? 我不知道如何COM和COM互操作,因爲我開始編程時,這已經不必要了。

謝謝。

回答

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); 
+0

什麼是[return:]標記的用途? -g – greg7gkb 2009-01-29 19:41:21

5

見 「消費非託管的DLL函數」 在MSDN主題:

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

無需添加任何COM代理,.NET可以消耗直接使用函數[DllImport]屬性的DLL 。通過指定其他屬性,您還可以完全控制.NET和非託管DLL之間的編組。

2

喬已經回答了這一點,所以我要釘本上 - 給自己節省一些時間,不必挖掘和碾壓函數簽名,P/Invoke的有一個非常完整的Win32簽名庫,以wiki和Visual Studio插件的形式出現!

看看P/Invoke

相關問題