обычная DLL против расширения DLL - PullRequest
2 голосов
/ 01 июля 2011

У меня есть DLL (A.dll), которая использует ATL, и не может содержать MFC. Тем не менее, есть кое-что, что нужно, это MFC, поэтому я создал MFC обычную DLL , которая называется B.dll, и она автоматически загружается во время выполнения A.dll (через библиотеку импорта).

Часть B.dll, в которой нуждается A, - это класс (foo), определенный в B.dll, и в нем есть некоторые вещи, использующие MFC. Могу ли я создать объект Foo в A.dll? B должен быть расширением DLL вместо?

Обычная страница DLL говорит:

Все выделения памяти в пределах обычная DLL должна оставаться в пределах DLL; DLL не должна переходить к или получить от вызывающего исполняемого файла любой из следующих:

  • Указатели на объекты MFC

  • Указатели на память, выделенную MFC

но на странице DLL расширения написано

Исполняемый файл клиента должен быть приложением MFC, скомпилированным с определенным _AFXDLL., А A.dll не может быть приложением MFC.

Является ли проблемой использование обычной DLL в этом случае?

Спасибо

Bryan

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Может быть, я неправильно понимаю, но если A не может использовать MFC, а B предоставляет класс, который это делает, как вы можете создать экземпляр объекта в A?Вы ищете, чтобы у B была фабричная функция, которая создает объект и передает его A через указатель?В этом случае вам нужно убедиться, что B вызывает на нем delete (), а не A, потому что они будут иметь две разные кучи.

Является ли это COM-объектом или что вы подразумеваете под «библиотекой импорта»?Мы говорим «обычным» способом dll с заглушками в .lib или «библиотекой импорта» .tlb?(Не то чтобы это имеет значение для вопроса, я думаю, я просто пытаюсь представить ситуацию).

0 голосов
/ 01 июля 2011

Казалось бы, обычная DLL - правильный выбор.

Основная проблема с обычной DLL заключается в том, что если бы она была загружена в приложение MFC, то было бы две независимые копии MFC и все метаданные. Совет, который вы нашли, написан для того, чтобы убедиться, что поиск метаданных не приведет к неправильной копии. Не проблема в вашем сценарии.

...