2
在C#中我聲明瞭一個接口,它將暴露給COM供C++使用。我們的規範說一個整數參數應該是[in]UINT uiVal
。我在C#中使用了int
,它被暴露爲long
。什麼.NET類型編組到COM UINT?
這不是什麼大不了的事,但我怎麼能強制馬歇爾UINT
而非long
?某些特定的.Net類型,還是我需要以某種方式向C#參數添加屬性?
在C#中我聲明瞭一個接口,它將暴露給COM供C++使用。我們的規範說一個整數參數應該是[in]UINT uiVal
。我在C#中使用了int
,它被暴露爲long
。什麼.NET類型編組到COM UINT?
這不是什麼大不了的事,但我怎麼能強制馬歇爾UINT
而非long
?某些特定的.Net類型,還是我需要以某種方式向C#參數添加屬性?
UINT是來自Windows SDK的類型別名,您永遠不會從類型庫中獲取它。翻譯類型庫的工具,如您正在使用的#import指令,選擇本地C類型。歷史扮演着角色,COM最初是爲16位版本的Windows設計的。當長對聲明一個32位整數很重要。
C#聲明中最接近的是uint
,它將在您的C++代碼中被轉換爲unsigned long
。這很好,它仍然是一個32位的類型,微軟選擇了LLP64 data model作爲64位代碼。他們沒有太多的選擇。與在* nix中選擇的LP64模型不同。他們沒有太多的選擇,Y2K38災難即將來臨:)