我有C++中的結構:什麼等於C++的size_t在C#
struct some_struct{
uchar* data;
size_t size;
}
我想manged(C#)之間傳遞和本地(C++)。 C#中的size_t
是什麼?
P.S.我需要的尺寸完全匹配,因爲任何字節的差異將在巨大的問題的結果,而包裝
編輯:
本地和manged代碼是我的完全控制之下(我可以編輯任何我想要的)
我有C++中的結構:什麼等於C++的size_t在C#
struct some_struct{
uchar* data;
size_t size;
}
我想manged(C#)之間傳遞和本地(C++)。 C#中的size_t
是什麼?
P.S.我需要的尺寸完全匹配,因爲任何字節的差異將在巨大的問題的結果,而包裝
編輯:
本地和manged代碼是我的完全控制之下(我可以編輯任何我想要的)
沒有C#相當於size_t
。
的C# sizeof()
operator總是返回int
值與平臺無關的,所以在技術上的C#相當於size_t
是int
,但是這對你沒有任何幫助。
(注意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_t
,size_t
是sizeof操作符的結果的無符號整數類型;
從語言功能的角度來看,我會說你是對的。從互操作的角度來看,這些類型顯然不是等同的。如果OP想要將原始類型返回到C++,該怎麼辦?顯然可能會有數據丟失。 –
'size_t'和'sizeof()'是如何關聯的? – ST3
OP想要使用一個'struct',它包含一個'size_t'字段用於互操作。 [cppreference](http://en.cppreference.com/w/cpp/types/size_t)將其定義爲'typedef/* implementation-defined */size_t;' - 所以真正的答案取決於使用的C++實現。 –
C#中size_t的最佳等價物是UIntPtr類型。它在32位平臺上是32位,在64位平臺上是64位,並且沒有簽名。
小心。對於C/C++的所有實現,'size_t'不保證與'sizeof(void *)'相同。 –
該問題通過給出另一種聲明數組的方法來解決問題。所以它不回答我的問題, –
你真的問[this](http://stackoverflow.com/q/4956435/1997232)問題嗎? – Sinatr
沒有保留一:)...我可以嘗試所有的C#數字類型,並得到最好的一個,但我不認爲這是正確的方式 –