如果我希望將C#(Int32
)中的int
編組到本機(C++)庫,那麼在C++代碼中聲明相關變量的最佳方法是什麼?C++/C#PInvoke - 編組顯式大小的數字
我可以使用標準的int
,但我寧願明確說明該變量的寬度(我知道它在大多數平臺上都是32位的)。
到目前爲止,我可以看到兩個選項:
int32_t
在<cstdint>- (MSVC++標識符)......不過我想,如果我可以 保持平臺獨立
我似乎記得聽說C++ 11有一些新的庫,但我似乎無法找到任何提及它的地方。
謝謝。
如果我希望將C#(Int32
)中的int
編組到本機(C++)庫,那麼在C++代碼中聲明相關變量的最佳方法是什麼?C++/C#PInvoke - 編組顯式大小的數字
我可以使用標準的int
,但我寧願明確說明該變量的寬度(我知道它在大多數平臺上都是32位的)。
到目前爲止,我可以看到兩個選項:
int32_t
在<cstdint>我似乎記得聽說C++ 11有一些新的庫,但我似乎無法找到任何提及它的地方。
謝謝。
的INT關鍵字在目前出貨C#和C++編譯器類型別名,分別爲System.Int32和__int32,可以通過後端所使用的具體的類型。我已經寫了30年的代碼,並且使用了8位,16位,32位和64位處理器。和使用int 30年前,像我今天做的那樣。並花費很少的精力將程序移植到下一代架構或操作系統版本。
你也可以在winapi中看到這一點。每個用於函數參數或返回值的類型都是一個類型別名。 Windows版本1.0中的CreateWindow()函數看起來正好是與在Windows 8.1的64位版本中使用的相同
我不想錯過今天突然停止的進程。對於IBM來說,128位處理器已經是麪包和黃油了。語言使用類型別名來防止自己快速過時並被遺忘。對於像C和C++這樣的語言,C++也是如此。儘管在C#的情況下它肯定會需要移動一塊更大的石頭,但現在大多數C#程序員的腦海中都刻有這個標識。
故意地不是使用類型別名使您的程序減少便攜式。
在C++中int不是__int32的類型別名 –
它肯定是在Microsoft編譯器中。有一天它會是別的,也許是__int64。 –
當然。但是你沒有這麼說。你說「用C++語言」。 –
你可以使用int32_t,它正好是32位。有可能有一個C++實現,int32_t沒有被定義,但是在那種情況下,所有的投注都是關閉的。
在我所知道的每個支持C#的平臺上,C/C++ int都是32位,因此您可能會想到這一點。
要考慮的另一件事是你的C++代碼接受什麼類型。如果它接受int,並且使用int不是32位的平臺,那麼你仍然有問題。
int32_t似乎是一個體面的選擇 –