2012-03-08 106 views
2

我正在尋找一種C#集成數據類型,可以在32位機器上保存32位有符號值和在64位機器上保存64位有符號值。
其原因是對C函數的P/Invoke調用,該函數接收ssize_t參數。
我知道我可以用預處理指令工作「的DllImport」這個功能在不同的機器不同的方式(與整數 32位機和多頭 64位),但這需要我來構建和針對不同的目標出貨,這是非常不可取的。ssize_t的C#模擬類型

任何其他的解決方案,這個問題是非常歡迎的,當然:d

+0

@Marcelo - 我認爲您在尋找'IntPtr' – 2012-03-08 14:52:43

+0

另一個簡單的解決方案是始終發送您的C代碼64位值。你似乎沒有指出這不能做到的原因。 – 2012-03-08 14:56:23

+0

'ssize_t'不是C標準的一部分,但帶有POSIX。對於C,你有'intptr_t'或更好的'uintptr_t',它是一個整數類型,可以保存與指針相同的信息。它不一定存在(如果目標機器上沒有這種類型),但通常它是存在的。 – 2012-03-08 15:01:45

回答

5

可以使用IntPtr type

的IntPtr的類型的設計是一個整數,其大小是特定於平臺。也就是說,這種類型的實例預期在32位硬件和操作系統上爲32位,在64位硬件和操作系統上爲64位。

+0

gosh ..從來沒有想到IntPtr只是一個數字,我的頭腦總是把它看作是一個指針,爲此我一直認爲它是無符號的。釘牢它! – 2012-03-08 14:56:59

+0

IntPtr已簽名。如果你需要一個無符號類型,你可以使用[UIntPtr](http://msdn.microsoft.com/en-us/library/system.uintptr.aspx)。 – dtb 2012-03-08 14:59:04

+0

@dtb - 他表示他正在尋找存儲有符號整數。根據我做的一些快速閱讀,在處理「UIntPtr」時也有一個「疑難雜症」。 – 2012-03-08 15:15:38

1

我在尋找,可容納32位帶符號64位機器上的32位機和64位有符號值 值的C#整型數據類型。

您正在尋找IntPtr