Здравствуйте, vdoscorp, Вы писали:
V>Здравствуйте, k.o., Вы писали:
KO>>Здравствуйте, vdoscorp, Вы писали:
V>>>Есть COM-интерфейс ISourceDB
V>>>IdentificationDB получается на ура. А DataSourse приходит пустой.
V>>>Не подскажете в чем проблема?
KO>>А какой тип у pDB->DBName?
V>TCHAR
"Я знал, что ты скажешь это."

Вообще, наверно, даже не TCHAR, а TCHAR*? Между BSTR и TCHAR* есть большая разница, дело в том, что для BSTR хранится длина строки, например, для BSTR со значением "test" память будет выглядеть так:
[0x04000000|test\0]
сама переменная при этом будет указывать на начало строки "test", т.е. сразу на область памяти после размера. (хотя, всё это, по идее, implementation defined)
в любом случае, правильный код должен быть таким:
BSTR dbName = SysAllocString(pDB->DBName);
pElem->put_DataSourse(dbName);
SysFreeString(dbName);
Без этого возможны различные спецэффекты, пустой DataSource, пожалуй, самый безобидный результат.
Disclaimer: проверка ошибок, использование _bstr_t/CComBSTR и т.д. и т.п. оставляются читателю, в качестве упражнения.