Как добавить "простой объект ATL" в старый проект ATL DLL, обновленный до VS 2010?
У нас есть проект DLL, который существует в течение длительного времени (возможно, еще до Visual Studio 6), который был обновлен для каждой новой версии VS. Проект содержит ряд COM-классов, реализованных с использованием ATL.
после обновления до VS 2010, проект по-прежнему строит нормально. Однако, если я попытаюсь щелкнуть правой кнопкой мыши проект и выбрать добавить ->класса... ->простой объект ATL, Я получаю сообщение об ошибке, в котором говорится следующее:
классы ATL могут быть добавлены только в MFC EXE и MFC регулярные проекты DLL или проекты с полной поддержкой ATL.
Это сработало в VS 2008.
когда я смотрю на свойства проекта,использование MFC был установлен до Использовать Стандартные Библиотеки Windows и использование ATL был установлен до не использовать ATL. Я изменил их на использовать MFC в общей DLL и динамическая ссылка на ATL соответственно, но все равно получите ту же ошибку.
Я знаю, как добавлять новые объекты ATL без использования мастера, и я мог бы попытаться воссоздать проект с нуля, используя VS 2010, чтобы сделать его счастливым. Но кто-нибудь знает какой-либо простой способ получить VS, чтобы позволить мне использовать ATL простой объект мастер с проектом, который он не распознает как проект "с полной поддержкой ATL"?
2 ответов
Регистрация этот поток из.
кажется, что добавление этого фрагмента информации ваш код ATL c++ заставит его работать. Вам не нужно фактически создавать проект, просто удалите этот материал после того, как вы закончите с мастером (при условии, что решение работает для вас).
// Added fake code begins here
class CAppModule :
public CComModule
{
};
// Added fake code ends here, below is regular ATL project stuff
CAppModule _Module;
вот откуда все это берется, в $(VisualStudio)\VC\VCWizards33\common.js
:
/******************************************************************************
Description: Returns a boolean indicating whether project is ATL-based.
oProj: Project object
******************************************************************************/
function IsATLProject(oProj)
{
try
{
var oCM = oProj.CodeModel;
oCM.Synchronize();
// look for global variable derived from CAtlModuleT
var oVariables = oCM.Variables;
for (var nCntr = 1; nCntr <= oVariables.Count; nCntr++)
{
var oVariable = oVariables(nCntr);
var strTypeString = oVariable.TypeString;
if (strTypeString == "ATL::CComModule" || strTypeString == "ATL::CAutoThreadModule")
{
return true;
}
та же проблема здесь, но у источника проекта уже был CComModule _Module;
Исправлено на основе сценария IsATLProject показано выше, изменив его на
**ATL::**CComModule _Module;