Неуправляемая DLL (экспорт диалога) + библиотека классов (DLL) + нет стиля / тем Windows - PullRequest
1 голос
/ 23 февраля 2010

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

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

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

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

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

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

Спасибо взаранее!

1 Ответ

0 голосов
/ 23 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...