Member 9236261 Ответов: 3

Против ошибок компиляции 2010 года с приложением Метафайл проводник дебютант Джозеф м


Я скачал исходный код утилиты Метафайл Джозеф м Новичка проводника от его веб-сайте:

http://www.flounder.com/metafileexplorer.htm

но не удается добиться его успешной сборки с помощью Visual Studio 2010. Это проект на языке C++. Кто-нибудь еще добился успеха в этом деле? У меня нет доступа к более ранней версии VS, чтобы попробовать ее там, и я не знаю, с какой версией она была изначально построена, когда была написана. Может быть, это было успешно построено с более ранней версией, когда код был написан, но не с более новой версией VS?

Я новичок в использовании Visual Studio, поэтому понимаю, что, возможно, я упускаю из виду очевидное. Но в настоящее время я получаю следующую ошибку компиляции:

Ошибка C2664: 'TreeDecode::FormatEXTLOGPEN': не удается преобразовать параметр 1 из 'EXTLOGPEN32 *' в 'const EXTLOGPEN *'.

Что нужно сделать, чтобы это можно было построить с помощью Visual Studio 2010?

Кстати, это блестящая утилита отладчика ЭДС. Я пользуюсь им уже много лет. Недавно я загрузил исходное приложение с веб-сайта Мистера Ньюкомера, чтобы посмотреть, насколько трудно будет модифицировать эту утилиту для обработки GDI+ и обработки записей EMF+. Что мне нужно, так это модифицированная версия этой утилиты, которая также поддерживает EMF+.

Кто-нибудь сделал успешную модификацию этой утилиты или знает какие-либо другие, которые будут анализировать файл EMF и отображать записи EMF, EMF Plus или EMF Dual language, которые находятся в файле, позволяя вам визуально видеть выходные данные генерируемого файла во время одного шага через него?

Кстати, я отправила письмо мистеру Ньюкомеру еще в мае. Он сказал, что посмотрит, но с тех пор я ничего не слышал. Я предполагаю, что он был занят другими вещами и не имел возможности взглянуть на это. Тем временем я подумал, что хотел бы спросить, не было ли у кого-нибудь еще проблем с компиляцией этого приложения с VS 2010.

Christian Graus

Шансы, что кто-то еще здесь использует его, невелики. Вы читали документы по этим двум классам ? Я думаю, что это 32/64-битная проблема, на первый взгляд.

Sergey Alexandrovich Kryukov

Является ли код, дающий вам это сообщение компиляции, вашим или это библиотека?
Ошибка, если она очень объяснима-по-видимому, неконстантная точка не должна быть приведена к const.
--СА

3 Ответов

Рейтинг:
26

Sergey Alexandrovich Kryukov

Пожалуйста, посмотрите мой комментарий — вы его получили? Проблема вполне очевидна: C++ не допускает неявного приведения от непостоянного указателя к постоянному. Такое приведение будет означать, что объект, на который указывает постоянный указатель, не может измениться, но на самом деле он может измениться, поскольку на него также указывает непостоянный указатель, используемый в качестве исходного указателя в вашей операции присваивания.

В качестве обходного пути c++ оставляет за собой const_cast<> оператор. Пожалуйста смотрите:
http://msdn.microsoft.com/en-us/library/bz6at95h%28v=vs.100%29.aspx[^],
http://www.cplusplus.com/doc/tutorial/typecasting/[^].

Вы должны использовать его с большой осторожностью и предпочтительно избегать его использования, если вы можете получить постоянный указатель в первую очередь (источник назначения, правая часть назначения) или использовать непостоянный указатель в качестве левой части назначения (цель назначения). Если вам все еще нужно использовать const_cast<> оператор, вы должны быть уверены, что объект, на который указывают оба указателя, на самом деле не может быть изменен, иначе такая модификация может дать непредсказуемый результат. См. также это обсуждение:
http://www.cplusplus.com/forum/general/17155/[^].

—СА


RedDk

Прости, СА!!!
Случайно попал в один голос. Пожалуйста, ответьте взаимностью.

Sergey Alexandrovich Kryukov

Не проблема. Вы можете повторно загрузить страницу и снова проголосовать. Голосование будет изменено.
Спасибо.
—СА

Рейтинг:
1

Member 14895487

измените Аргументы FormatEXTLOGPEN с EXTLOGPEN на EXTLOGPEN32

TreeDecode.H-файл :
статический void FormatEXTLOGPEN(const EXTLOGPEN32 * lp, LPVOID p1, LPVOID p2);

TreeDecode.cpp файл :
void TreeDecode::FormatEXTLOGPEN(const EXTLOGPEN32 * lp, LPVOID p1, LPVOID p2)


Рейтинг:
0

Member 9236261

Thanks so much for your suggestions. What threw me off was that apparently Mr Newcomer originally built this application successfully with an earlier version of MS Studio. But I had the build issue when attemping with MS Studio 2010. As you can tell, I'm new to Visual Studio and new to C++ as well. I have primarily been using C because that's what my company's software is written in that I support. It has to be portable to run on Windows, Unix and z/OS platforms. I have written portable EMF driver code in C that will run on these platforms and allow a customer to create EMF files on any of them. Mr Newcomer's utility is great for debugging EMF file issues. That's why I use it.

Суть в том, что я должен стать лучше с использованием C++ и Visual Studio, прежде чем даже пытаться обрабатывать улучшения в этом проекте Visual Studio. Для меня это только начало. Спасибо за обратную связь. Я действительно ценю это. Я возьму эту информацию и побегу с ней.


SuperDre

ну, проблема заключается в этой линии:
FormatEXTLOGPEN(& ((EMREXTCREATEPEN*)rec)->elp, p1, (LPVOID)lpen);
Но как вы на самом деле это исправили? (Я очень новичок в C++, но мне нужно перекомпилировать проект, так как исходный exe-файл требует MFC71U.DLL который больше не доступен..