я незащищенный метод, который принимает длинный * в качестве параметра, например так:Лучшая практика для обработки вниз бросает из-за C++ C2664 при компиляции 64 бит
void MyClass::MyPublicMethod(long *pLong)
Внутри этого метода я называю системы API, который принимает INT64 *, как это:
void MyClass::MyPublicMethod(long *pLong)
{
//SomeAPI::APIMethod(INT64* p64);
SomeAPI::APIMethod(&pLong);
}
При компиляции в x64, я получаю ошибку (это правильно):
error C2664: 'SomeAPI::APIMethod(int64* p64)': cannot convert argument 1 from 'long*' to 'INT64*'
Я не хочу менять подпись моего выставленного метода, потому что он будет иметь многие последующие последствия. Каков наилучший способ решить эту ситуацию, если предположить, что я знаю, что p64 не будет превышать пределы длинного?
Что-то вроде этого?
void MyClass::MyPublicMethod(long *pLong)
{
// Use a local INT64 for the API call.
INT64 tmp64 = *pLong;
//SomeAPI::APIMethod(INT64* p64);
SomeAPI::APIMethod(&tmp64);
*pLong = (long)tmp64;
}
Это не совсем красиво, но это, безусловно, кажется самым простым способом справиться с этим. –