У меня проблема с COM-взаимодействием из приложения C # в компонент COM-сервера inproc.
Я сократил проблему до простой программы тестирования c #.Он создает экземпляр класса взаимодействия серверного компонента, устанавливает значение строки как свойство в экземпляре, а затем устанавливает другое свойство строки.Я не делаю ничего необычного с сортировкой.Просто используя класс взаимодействия, сгенерированный, когда я добавил ссылку на компонент COM.Что-то вроде:
using MyLib; // Interop assy
// ...
MyComp comp = new MyComp();
comp.Prop1 = "abc";
comp.Prop2 = "xyz";
Результаты:
Если я запускаю тестовую программу вне VS, тогда, когда задано второе свойство, я последовательно получаю COMException сHRESULT 0x80010105
(RPC_E_SERVERFAULT
).
Если я запускаю тестовую программу в Visual Studio 2005, она последовательно работает правильно.
Я написал эквивалентный код на неуправляемом C ++ (без atl, только простые указатели интерфейса), и это правильно работает как внутри, так и вне VS.
Мой вопрос : что отличается от средыв каком взаимодействии происходит при запуске внутри отладчика, который может объяснить то, что я вижу?Я предполагаю, что E_RPC_SERVERFAULT
генерируется маршаллером взаимодействия, но почему только в отладчике?Любые предложения о том, как поступить с этим?
[Я не очень много говорил о компоненте com, потому что мой вопрос о различном поведении, которое я вижу в отладчике и из него.Компонент com хорошо протестирован и используется уже более 7 лет (тысячи вызовов в день в серверной среде), поэтому я в этом совершенно уверен.Это 32-битная DLL.У меня есть источник, но в настоящее время у меня нет подходящей среды для сборки.Даже если бы я это сделал, я не уверен, как отладить его из управляемого кода.Возможно ли это?]
ОБНОВЛЕНИЕ
Пока нет решения, но есть еще замечания:
- Я попытался запустить приложение от имени администратора,а также с выключенным UAC.Тот же результат.
- Я пытался подключиться к процессу до того, как произошла ошибка, но в окне вывода не было индикации появления структурированного исключения.
- Я попытался явно установить модель квартиры дляпроверить основной поток приложения на STA, а затем MTA, но это не имеет значения.COM-компонент является многопоточным.
- Я попытался запустить управляемое тестовое приложение (за пределами Visual Studio) на компьютере с Win2003 и на другом компьютере с Win7 pro.Он работал правильно на обоих.
Последний пункт указывает на проблему с моей машиной, но я не уверен, что.
[Среда - Framework 2.0, работающая на Win7 Pro32-разрядная версия с Visual Studio 2005 Pro.]