【发布时间】:2015-06-18 00:22:22
【问题描述】:
我有一个公开的方法,它接受一个 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;
}
【问题讨论】:
-
它不是很漂亮,但这似乎是最直接的处理方式。