Здравствуйте, dmitry_npi, Вы писали:
_>Здравствуйте!
_>Ситуация такая: я создаю сервер на С# с простым классом и интерфейсом к нему (как описано в MSDN — Interop tutorial). Затем я регистрирую его при помощи
_>_>regasm somepath\....\CSharpServer.dll /tlb: somepath\.....\CSharpServer.tlb
_>
_>Все регистрируется успешно.
_>Затем в С++ я импортирую библиотеку типов при помощи #import из того места, где она образовалась, т.е. из \CSharpServer\bin\debug. Она импортируется (проект компилируется), но во время выполнения при вызове CoCreateInstance происходит ошибка: не найден файл. После "побайтного" сравнения с примером из MSDN нашел фишку — они копируют dll в директорию клиента. Может, я чего-то не понимаю, тогда объясните — какой же это COM? Разве COM не должен сам уметь определить, где лежит зарегистрированная dll??
если внимательно посмотреть в реестре, то видно в отличие от обчного com в inprocServer32 прописывается не путь до com-сервера, а mscoree.dll и указано имя сборки для загрузки. так вот эта сборка либо располагается в GAC либо лежит в доступном для клиента месте (в вашем случае в его директории)