DirectShow抱怨我正在运行混合的调试/零售版本。什么?

时间:2010-03-03 17:17:37

标签: .net debugging directshow assert

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应用程序中使用它。

2 个答案:

答案 0 :(得分:1)

这不是unicode问题。注释是正确的:您链接到调试库,但您的模块中没有定义DEBUG。

有两种情况是断言触发:两者都是非空的,并且当两者都为空时。两个非null都表示某些unicode混合,但是这个方法只能从#ifdef UNICODE中调用,其中一个参数为0。

对象名称参数通常使用NAME()宏传递给CBaseObject。此宏在发布版本中评估为NULL,并在调试版本中评估对象名称字符串。 CBaseObject将在调试版本中调用寄存器函数。

您的构造函数正在编译未定义DEBUG的wxdebug.h(因此NAME()的计算结果为NULL)。但是您要链接到使用DEBUG定义的基类库。

答案 1 :(得分:0)

代码看起来像测试混合单/宽字符构建,因为sz是一个零终止字符串,而wsz是一个宽字符零终止字符串,代码基本上测试它们中是否只有一个具有非零值。也许评论混淆了?

尝试查看您的构建是否已部分定义UNICODE(或者是使用广泛的字符支持或其他内容构建),而不是部分构建。