В компиляторе C ++ для MSVC long
и int
имеют одинаковый размер. Я не уверен, если вы думаете о long long
, который представляет собой 64-разрядное целое число со знаком в MSVC. Если вы имеете в виду просто long
, тогда Int32
в .Net должно быть в порядке.
Чтобы быть в безопасности, вы можете использовать предоставленные макросы для 32-битных целых чисел со знаком:
#include <cstdint>
MyClass^ MyMethod(... params ..., array<int32_t>^ myParam) { ...
Или еще лучше, используя определенные типы .NET, как рекомендует Александр C:
MyClass^ MyMethod(... params ..., array<System::Int32>^ myParam) { ...
Самое важное, на что следует обратить внимание, это то, что int
, long
, int32_t
и System::Int32
имеют одинаковый точный размер в текущем компиляторе MSVC C ++. Неважно, какой вы используете, но int32_t
и System::Int32
- самый безопасный выбор.
Microsoft может изменить их long
на более поздний срок, чтобы иметь размер больше 32-битного. Если это произойдет, то вы можете перекомпилировать этот же код с новым компилятором без проблем.
Что касается размера каждого типа данных, стандарт требует, чтобы int
и long
имели размер не менее 4 байтов. На некоторых компиляторах вы можете обнаружить, что sizeof(long) != sizeof(int)
. По этой причине, если вы хотите убедиться, что вы используете целые числа, равные 4 байтам, вы должны использовать предоставленные заголовки, которые гарантируют требуемый размер.
Подробнее см. Здесь: http://en.wikipedia.org/wiki/Long_integer. Статья содержит соответствующие ссылки на стандарты.