2010-03-03 26 views
0

C:\ Program Files文件\微軟的SDK \的Windows符\ v#\樣本\多媒體\ DirectShow的\基類\ wxdebug.gpp行890:DirectShow的抱怨我運行一個混合調試/零售版本。什麼?

/* If this fires you have a mixed DEBUG/RETAIL build */ 

ASSERT(!!szObjectName^!!wszObjectName); 

是什麼意思,我該如何解決?

如果它的事項:我已經寫了一個包裝DirectShow的有管理的媒體播放器庫,而且我用它在我的WPF應用程序。

回答

1

這不是一個unicode問題。註釋是正確的:你正在鏈接到一個調試庫,但是你沒有在你的模塊中定義DEBUG。

有兩種情況下,斷言火災:其中兩個都是非空,並與時俱空。這兩個非null都會指示某種unicode混淆,但此方法僅在#ifdef UNICODE中使用其中一個參數0調用。

對象名參數通常使用NAME()宏傳遞給CBaseObject。此宏在發佈版本中評估爲NULL,並在調試版本中評估爲對象名稱字符串。 CBaseObject將在調試版本中調用註冊函數。

你的構造函數編譯wxdebug.h用DEBUG沒有定義(所以NAME()計算結果爲NULL)。但是你正在鏈接到一個基本類庫,它是用DEBUG定義的。

+1

實際的問題是,我有'(LPCTSTR)NULL'其中'NAME()'應該是。 – CannibalSmith 2010-03-10 11:00:57

0

該代碼看起來像混合單/寬字符構建測試,因爲sz是一個零終止的字符串和wsz是一個寬字符零終止的字符串,並且代碼基本上測試是否其中一個具有非零值。也許評論是混合起來的?

嘗試找出如果你的打造了定義部分UNICODE(或者是建立與寬字符支持,或東西),和部分沒有。

相關問題