Включить MFC-ресурс (CDialog-Form) в DLL-библиотеку Visual C ++

Я пытаюсь скомпилировать DLL, которая включает в себя форму CDialog.
Подробно я хотел бы включить ресурс, содержащий макет и все открытые методы.

Основная цель — экспортировать форму (и ее методы), чтобы использовать ее во внешней среде, не связываясь с IDD существующих форм.

Мои (однодневные) исследования не показали никаких возможных решений этой проблемы, и, поскольку я новичок в программировании C ++ с помощью MFC, я не знаю, с чего начать.

Спасибо за вашу поддержку!

0

Решение

Я новичок в программировании C ++ с MFC, я не знаю, как получить
началось.

Вот и все … Вы, возможно, все готовы принять некоторые из этих мер.

Один из способов сделать это — создать файл заголовка, который можно использовать для управления экспортом и импортом вашего кода. Например, в заголовочном файле диалогового класса, если вы кодируете что-то вроде:

#ifdef DllImpExp
#undef DllImpExp
#endif

#ifdef SomeDefineWeWillUseToControlImportExport
#define DllImpExp   __declspec( dllexport )
#else
#define DllImpExp   __declspec( dllimport )
#endif

один и тот же заголовок можно использовать для экспорта и импорта класса диалога. Объявление вашего диалогового класса должно затем указать «DllImpExp». Например,

class DllImpExp SomeClass : public SomeBaseClass

В проекте, который создает DLL, вы бы добавили определение препроцессора для «SomeDefineWeWillUseToControlImportExport». Это заставляет компилятор экспортировать код вашего диалогового класса. На этом этапе ваш класс диалога готов к использованию другим объектом.

После того как вы экспортировали свой класс, ваш проект dll создал импортную библиотеку с тем же именем. Эта библиотека используется в качестве входных данных для других проектов, в которых вы хотите использовать код диалога. Есть несколько способов сделать это, но простое перечисление этой библиотеки в качестве входных данных для компоновщика проекта, который хочет ее использовать, должно работать. Кроме того, вы не должны определять «SomeDefineWeWillUseToControlImportExport» в проекте, чтобы класс был импортирован.

Что касается доступа к вашему диалоговому ресурсу в dll, вам нужно предпринять некоторые специальные шаги. Прежде чем пытаться отобразить диалоговое окно, вам нужно указать текущий дескриптор ресурса на dll, которая содержит ресурс. Ваше приложение использует один справиться знать, куда загружать ресурсы (т.е. диалоги). Поскольку у вас есть диалоги в одном или нескольких местах, вам нужно использовать две функции для управления этим. Вы хотите использовать AfxGetResourceHandle сохранить текущий дескриптор по умолчанию, который используется для загрузки ресурсов. Затем посмотрите на AfxSetResourceHandle изменить дескриптор по умолчанию для загрузки из вашей DLL. И не забудьте восстановить сохраненный дескриптор, когда вы закончите работу с диалоговым окном из вашей dll. Невыполнение этого требования может привести к некоторым странным утверждениям MFC.

0

Другие решения