2015-10-02 32 views
3

我有C++中的結構:什麼等於C++的size_t在C#

struct some_struct{ 
uchar* data; 
size_t size; 
} 

我想manged(C#)之間傳遞和本地(C++)。 C#中的size_t是什麼?

P.S.我需要的尺寸完全匹配,因爲任何字節的差異將在巨大的問題的結果,而包裝

編輯:

本地和manged代碼是我的完全控制之下(我可以編輯任何我想要的)

+0

該問題通過給出另一種聲明數組的方法來解決問題。所以它不回答我的問題, –

+0

你真的問[this](http://stackoverflow.com/q/4956435/1997232)問題嗎? – Sinatr

+0

沒有保留一:)...我可以嘗試所有的C#數字類型,並得到最好的一個,但我不認爲這是正確的方式 –

回答

6

沒有C#相當於size_t

C# sizeof() operator總是返回int值與平臺無關的,所以在技術上的C#相當於size_tint,但是這對你沒有任何幫助。

(注意Marshal.SizeOf()也返回int

另外請注意,不C#對象能夠比2GB更大的尺寸儘可能sizeof()Marshal.Sizeof()關注。數組可以大於2GB,但不能對數組使用sizeof()Marshal.SizeOf()

出於您的目的,您需要知道DLL中的代碼版本用於size_t並在C#中使用適當的大小整數類型。

要認識到的一件重要事情是在C/C++ size_t中通常具有與intptr_t相同的位數,但這並不能保證,特別是對於分段體系結構。

我知道很多人說「使用UIntPtr」,這通常會起作用,但不保證是正確的。


C/C++ definition of size_tsize_t

是sizeof操作符的結果的無符號整數類型;

+0

從語言功能的角度來看,我會說你是對的。從互操作的角度來看,這些類型顯然不是等同的。如果OP想要將原始類型返回到C++,該怎麼辦?顯然可能會有數據丟失。 –

+0

'size_t'和'sizeof()'是如何關聯的? – ST3

+0

OP想要使用一個'struct',它包含一個'size_t'字段用於互操作。 [cppreference](http://en.cppreference.com/w/cpp/types/size_t)將其定義爲'typedef/* implementation-defined */size_t;' - 所以真正的答案取決於使用的C++實現。 –

3

C#中size_t的最佳等價物是UIntPtr類型。它在32位平臺上是32位,在64位平臺上是64位,並且沒有簽名。

+0

小心。對於C/C++的所有實現,'size_t'不保證與'sizeof(void *)'相同。 –

相關問題