次のようなパラメーターとして long* を受け入れる公開メソッドがあります。
void MyClass::MyPublicMethod(long *pLong)
このメソッド内で、次のように INT64* を受け入れるシステム API を呼び出します。
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 が long の制限を超えないことがわかっている場合、この状況に対処する最善の方法は何ですか?
このようなもの?
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;
}