Неуправляемая DLL (диалоговое окно экспорта) + библиотека классов (DLL) + без стилей/тем Windows

У меня есть управляемое приложение TestApplication.exe на C#, и Application.EnableVisualStyles() уже вызывается.

У меня есть библиотека классов MySharedCode.dll также на С#, которая использует [DLLImport()] для импорта некоторых внешних диалогов из неуправляемой dll.

Что ж, теперь я использую (добавлю ссылку) MySharedCode.dll в своем TestApplication.exe и вызываю из него function MyTestConfigDlg(). TestClass.MyTestConfigDlg();

ОК, все работает нормально, и я получаю свое диалоговое окно, но в диалоговом окне НЕТ стилей/тем XP?

Я просто хотел посмотреть, есть ли общая проблема с управляемыми/неуправляемыми модулями, поэтому я использовал [DLLImport()] для вызова того же диалога MyTestConfigDlg(), но на этот раз непосредственно в моем TestApplication.exe! УХ ТЫ! Работал, как я и ожидал. Диалог был в XP Style/Themes!

Итак, кто-нибудь здесь, кто может мне помочь? К вашему сведению: я также пытался (только для теста) вызвать вызов MessageBoxA() API в моей библиотеке классов Dll, которая позже вызывалась моим TestApplication.exe, а MessageBoxA() также не имел стилей/тем!

Заранее спасибо!


person Gohlool    schedule 23.02.2010    source источник


Ответы (1)


Использование Application.EnableVisualStyles() применяется к определенным элементам управления Windows, таким как ListBox, ListView, Menu, Buttons, чтобы с самого начала привести его в соответствие с элементом управления темами XP, если он работал в Vista и более поздних версиях, он соответствовал бы элементам управления этому стилю. также. Короче говоря, я не знаю, как вы имеете в виду, что диалоговое окно не имеет поддержки XP/Themes при вызове напрямую через ссылки, но когда вы использовали ключевое слово DllImport для импорта функции, она работала, это необычно. Обычно DllImport используется для API неуправляемого кода, но каким-то образом он подхватил его... Я помню, что была ошибка с платформой .NET 1.1: если вы вызывали Application.EnableVisualStyles(), она не работала, если только вызов Application.DoEvents() был вызван между включением визуальных стилей и созданием экземпляра winforms, может быть, в вашем случае, при создании экземпляра диалога, возможно, это могло бы решить его, вызвав Application.DoEvents(), кроме этого, у меня нет идей...

Надеюсь, это поможет. С уважением, Том.

person t0mm13b    schedule 23.02.2010
comment
Спасибо за информацию, но она не сильно помогла мне решить мою проблему! - person Gohlool; 23.02.2010