代码之家  ›  专栏  ›  技术社区  ›  Paul Knopf

C PInvoke返回无效/错误的bool值,仅当在调试模式下编译本机代码时(仅限OSX)

  •  0
  • Paul Knopf  · 技术社区  · 6 年前

    所以,我有个奇怪的问题。我正在进行一个简单的pinvoke调用,以从托管代码中获取布尔值。

    C/C++

    Q_DECL_EXPORT bool net_variant_getBool(NetVariantContainer* container)
    {
        bool result = container->variant->getBool();
    
        // This function will only return the right value if I use the following code in OSX in release mode (debug works with or without it).
        // qDebug("Return value is: %d", result);
    
        return result;
    }
    

    C.*

    [DllImport("QmlNet.dylib")]
    static extern bool net_variant_getBool(IntPtr variant);
    

    上面的代码在Linux/Windows的调试或发布模式以及OSX上都能很好地工作。 仅在调试模式下 .

    在处于释放模式的OSX上,C中的结果值是错误的。如果我试图记录返回的bool是什么(为了找出问题所在),它会打印出正确的值, 然后返回正确的值! 是的,那个 qDebug 上面被注释掉的宏将 修理 我的问题。WTH?

    这个问题只显示它在OSX/Clang上处于释放模式。

    这里是OSX上用于调试和发布版本的编译输出。 https://gist.github.com/pauldotknopf/3949b7e86d6a4bfb59788dd0b7c44536

    我完全迷路了。有人有什么想法吗?我不想发布调试libs!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Paul Knopf    6 年前

    bool here

    byte