C:\ Program Files \ Microsoft SDKs \ Windows \ v#。#\ Samples \ multimedia \ directshow \ baseclasses \ wxdebug.gpp第890行:
/* If this fires you have a mixed DEBUG/RETAIL build */
ASSERT(!!szObjectName ^ !!wszObjectName);
这是什么意思,我该如何解决?
如果重要:我编写了一个托管DirectShow的托管媒体播放器库,我在WPF应用程序中使用它。
答案 0 :(得分:1)
这不是unicode问题。注释是正确的:您链接到调试库,但您的模块中没有定义DEBUG。
有两种情况是断言触发:两者都是非空的,并且当两者都为空时。两个非null都表示某些unicode混合,但是这个方法只能从#ifdef UNICODE中调用,其中一个参数为0。
对象名称参数通常使用NAME()宏传递给CBaseObject。此宏在发布版本中评估为NULL,并在调试版本中评估对象名称字符串。 CBaseObject将在调试版本中调用寄存器函数。
您的构造函数正在编译未定义DEBUG的wxdebug.h(因此NAME()的计算结果为NULL)。但是您要链接到使用DEBUG定义的基类库。
答案 1 :(得分:0)
代码看起来像测试混合单/宽字符构建,因为sz是一个零终止字符串,而wsz是一个宽字符零终止字符串,代码基本上测试它们中是否只有一个具有非零值。也许评论混淆了?
尝试查看您的构建是否已部分定义UNICODE(或者是使用广泛的字符支持或其他内容构建),而不是部分构建。