OleInitialize не работает, когда включена среда выполнения Common Lanuage?

Я работаю над консольным приложением wxWidgets, которое я хочу вызывать = из C# DLL через CLR. К сожалению, приложение икает в коде инициализации приложения wxWidgets из-за сбоя OleInitialize. Ошибка, которую я вижу, представляет собой всплывающее окно с простым сообщением «Не удается инициализировать OLE».

Кажется, что этой проблемы обычно избегают, устанавливая стиль квартиры для потоков, применяя директиву к точке входа приложения, но я действительно борюсь с тем, какую точку входа я ищу. Мой код C# представляет собой DLL: конкретной точки входа нет. Код, скомпилированный с помощью /CLR, существует в .lib, который связан с моим приложением wxWidgets. wxWidgets фактически определяет WinMain в своем коде и позволяет мне переопределять поведение посредством реализации wxApp.

Другие предложения включают отключение поддержки OLE в wxWidgets, но в моем выпуске 2.8.6 установка wxUSE_OLE, wxUSE_CLIPBOARD, wxUSE_DATAOBJ, wxUSE_DRAG_AND_DROP на 0 создает неразрешенные внешние объекты при компиляции wxWidgets.

Наслаждайтесь сталкивался с этим раньше и нашел эффективную работу вокруг? Может ли кто-нибудь дать какие-либо разъяснения о том, какую точку входа мне нужно изменить?


person antik    schedule 08.09.2009    source источник


Ответы (1)


Как упоминалось в моем вопросе, это проблема, связанная с настройками стиля потока между приложением C++ и значениями по умолчанию CLR. По-видимому, когда-то это была ошибка, и Microsoft выпустила исправление:

http://msdn.microsoft.com/en-us/library/s6bz81ya.aspx

Перекомпиляции исполняемого файла с использованием .lib с поддержкой CLR с /CLRTHREADATTRIBUTE:STA было достаточно, чтобы устранить ошибки, которые я видел.

person antik    schedule 10.09.2009