DirectShow жалуется, что у меня смешанная отладка / розничная сборка. Какие? - PullRequest
0 голосов
/ 03 марта 2010

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 ]

1 голос
/ 04 марта 2010

Это не проблема Unicode. Комментарий правильный: вы ссылаетесь на библиотеку отладки, но в вашем модуле не определен DEBUG.

Есть два случая, когда срабатывает assert: оба ненулевые, и когда оба нулевые. Оба значения, отличные от NULL, указывают на некоторую путаницу в Юникоде, но этот метод вызывается только из UNIFODE #ifdef с одним из параметров 0.

Параметр имени объекта обычно передается в CBaseObject с помощью макроса NAME (). Этот макрос возвращает значение NULL в сборках выпуска и строку имени объекта в сборках отладки. CBaseObject вызовет функцию регистра в отладочных сборках.

Ваш конструктор компилирует wxdebug.h с неопределенным DEBUG (поэтому NAME () оценивается как NULL). Но вы ссылаетесь на библиотеку базовых классов, которая была создана с определением DEBUG.

G

0 голосов
/ 03 марта 2010

Код выглядит как тестирование для смешанной сборки с одним / широким символом, поскольку sz - строка с нулевым символом в конце, а wsz - строка с широким символом с нулевым символом, и код в основном проверяет, имеет ли ровно один из них ненулевое значение. Может быть, комментарий перепутан?

Попытайтесь выяснить, определена ли в вашей сборке частично UNICODE (или она построена с поддержкой широких символов или что-то в этом роде), а частично - нет.

...