C ++将int转换为* LONG

时间:2014-02-13 22:56:43

标签: c++ visual-studio-2012 int type-conversion long-integer

我有以下代码:

STDMETHODIMP CWrapper::openPort(LONG* m_OpenPortResult)
{
    string str("test");
    const char * c = str.c_str();

    m_OpenPortResult=Open(c); //this does not work because "Open" returns an int

    return S_OK;
}

int Open(const char* uKey)
{

}

我无法将“int”转换为“LONG *”。 编译器告诉我“'int'不能转换为'LONG *'。

我也尝试使用INT *而不是LONG *,但这也给了我一个错误。

有人可以告诉我如何将int转换为LONG *或INT *?

2 个答案:

答案 0 :(得分:4)

您必须取消引用传递给openPort的指针才能使其正常工作。

*m_OpenPortResult = Open(c);

这样您就可以写入m_OpenPortResult实际指向的地址。这就是你想要的。 您可能还想阅读有关C ++中的引用的内容。如果你能够(以你的形式开发openPort - 函数)修改函数,你可以使用

STDMETHODIMP CWrapper::openPort(LONG &m_OpenPortResult)
{
    // code...
    m_OpenPortResult = Open(c);
    return S_OK;
}

适当的通话看起来像

LONG yourResult;
wrapperInstance.openPort(yourResult); // without & before!

这可能更符合您的需求,因为引用有几个优点,应该在没有明确理由使用指针时使用。

答案 1 :(得分:1)

您无需转换任何内容。 LONG*是指向LONG的指针,您可以将int分配给LONG。只需取消引用指针,然后分配它:

*m_OpenPortResult = Open(c); // <-- note the *

或更安全:

if (!m_OpenPortResult) return E_POINTER;
*m_OpenPortResult) = Open(c);

甚至:

LONG ret = Open(c);
if (m_OpenPortResult) *m_OpenPortResult = ret;