2014-01-12 66 views
0

如果我希望將C#(Int32)中的int編組到本機(C++)庫,那麼在C++代碼中聲明相關變量的最佳方法是什麼?C++/C#PInvoke - 編組顯式大小的數字

我可以使用標準的int,但我寧願明確說明該變量的寬度(我知道它在大多數平臺上都是32位的)。

到目前爲止,我可以看到兩個選項:

  • int32_t<cstdint>
  • (MSVC++標識符)......不過我想,如果我可以
  • 保持平臺獨立

我似乎記得聽說C++ 11有一些新的庫,但我似乎無法找到任何提及它的地方。

謝謝。

+0

int32_t似乎是一個體面的選擇 –

回答

1

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#程序員的腦海中都刻有這個標識。

故意地不是使用類型別名使您的程序減少便攜式。

+0

在C++中int不是__int32的類型別名 –

+0

它肯定是在Microsoft編譯器中。有一天它會是別的,也許是__int64。 –

+0

當然。但是你沒有這麼說。你說「用C++語言」。 –

0

你可以使用int32_t,它正好是32位。有可能有一個C++實現,int32_t沒有被定義,但是在那種情況下,所有的投注都是關閉的。

在我所知道的每個支持C#的平臺上,C/C++ int都是32位,因此您可能會想到這一點。

要考慮的另一件事是你的C++代碼接受什麼類型。如果它接受int,並且使用int不是32位的平臺,那麼你仍然有問題。