所以,我有个奇怪的问题。我正在进行一个简单的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!