【问题标题】:C++ Convert int to *LONGC++ 将 int 转换为 *LONG
【发布时间】:2014-03-13 02:33:15
【问题描述】:

我有以下代码:

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*?

【问题讨论】:

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


    【解决方案1】:

    您必须取消引用传递给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!
    

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

    【讨论】:

      【解决方案2】:

      你不需要转换任何东西。 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多