Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
1

Afx.h

29.12.2010, 16:16. Показов 4332. Ответов 18
Метки нет (Все метки)

добрый день. подскажите пожалуйста. делаю
C++
1
2
#define _AFXDLL
#include <afx.h>
в консольном приложении все работает без нарекний, но вот в форме при подключении к пустому проекту вылетает куча ошибок и предупреждений. (107 ошибок и 258 предупреждений).
в чем проблема знает кто? visual studio 2008 professional.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2010, 16:16
Ответы с готовыми решениями:

windows.h and afx.h
Добрый вечер! Есть проект, где используются винапишные функции и следовательно подключена...

Программа перестает компилироваться после подключения библиотеки <Afx.h>
#include &quot;stdafx.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 17:09 2
где ошибки? хоть часть.
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 17:20  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
C:\MV studia 2008\VC\atlmfc\include\afxv_w32.h(247) : error C3641: DrawState: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\afxv_w32.h(265) : error C3641: DrawStatusText: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
E:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winbase.h(2534) : error C3641: FreeResource: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\afxv_w32.h(279) : error C3641: UnlockResource: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\afx.h(506) : error C3641: Afx_clearerr_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(90) : error C3641: InterlockedExchangePointer: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(102) : error C3641: ATL::_AtlGetConversionACP: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(535) : error C3641: AtlA2WHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(554) : error C3641: AtlW2AHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(572) : error C3641: AtlA2WHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(577) : error C3641: AtlW2AHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(530) : error C3641: AtlDevModeW2A: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlexcept.h(62) : error C3641: ATL::AtlThrowImpl: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlexcept.h(81) : error C3641: ATL::AtlThrowLastWin32: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlalloc.h(227) : error C3641: ATL::Checked::memcpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(68) : error C3641: ATL::Checked::wmemcpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(73) : error C3641: ATL::Checked::memmove_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(78) : error C3641: ATL::Checked::strcpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(83) : error C3641: ATL::Checked::wcscpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(88) : error C3641: ATL::Checked::tcscpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(93) : error C3641: ATL::Checked::strncpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(98) : error C3641: ATL::Checked::wcsncpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(103) : error C3641: ATL::Checked::tcsncpy_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(108) : error C3641: ATL::Checked::strcat_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlchecked.h(113) : error C3641: ATL::Checked::wcscat_s: недопустимое соглашение вызова "__cdecl " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
я так понял что то с библиотеками, как исправить?
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 17:25 4
ясно-же, русским языком, написано:
Цитата Сообщение от NiRamz Посмотреть сообщение
недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
параметры компиляции надо поменять.
а то, в таком режиме он не может сделать исполняемый файл.
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 17:37  [ТС] 5
а можно поподробнее пожалуйста. я просто только начинаю ..
это режимы debug и releasе? правильно я понимаю? просто эти ошибки в релизе идут. попробывал сейчас сменить не дебаг вышло поменьше, но смысл тот же ..

C++
1
2
3
4
5
6
7
8
9
10
11
C:\MV studia 2008\VC\atlmfc\include\afxv_w32.h(247) : error C3641: DrawState: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\afxv_w32.h(265) : error C3641: DrawStatusText: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
E:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winbase.h(2534) : error C3641: FreeResource: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\afxv_w32.h(279) : error C3641: UnlockResource: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(90) : error C3641: InterlockedExchangePointer: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(102) : error C3641: ATL::_AtlGetConversionACP: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(535) : error C3641: AtlA2WHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(554) : error C3641: AtlW2AHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(572) : error C3641: AtlA2WHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(577) : error C3641: AtlW2AHelper: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
C:\MV studia 2008\VC\atlmfc\include\atlconv.h(530) : error C3641: AtlDevModeW2A: недопустимое соглашение вызова "__stdcall " для функции, скомпилированной с параметрами /clr:pure или /clr:safe
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 17:53 6
Цитата Сообщение от NiRamz Посмотреть сообщение
это режимы debug и releasе?
нет, это параметр компилятора /clr
написано-же.
ищи в настройках проекта.
Установка параметра компилятора в Visual Studio

1.

Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите пункт Свойства, чтобы открыть диалоговое окно Страницы свойств проекта.
2.

Выберите папку Свойства конфигурации.
3.

На странице свойств Общие измените свойство Поддержка среды CLR.
ПримечаниеПримечание

Если в диалоговом окне Страницы свойств проекта включен параметр /clr, свойства параметров компилятора, несовместимые с /clr, также будут настроены соответствующим образом.Например, если используется параметр /RTC, а затем включается /clr, то параметр /RTC будет отключен.

Аналогичным образом при отладке приложения, созданного с помощью /clr, задайте для свойства Тип отладчика значение Смешанный или Только управляемый код.Дополнительные сведения см. в разделе Параметры проекта для конфигурации отладки C++.
3
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 18:11  [ТС] 7
спасибо большое)
1
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 18:48 8
да пожалуйста.
а вообще, обычно быстрее самому поискать в MSDN, чем ждать ответа на форуме.
чаще всего, все заняты.
http://msdn.microsoft.com/ru-r... fault.aspx
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 19:33  [ТС] 9
форум был крайним вариантом. пролазил в течении все что смог, так не найдя проблемы(
есть еще вопрос, если возможно ответьте.

C++
1
2
                    finder.GetFileName();
                    finder.GetFilePath();
я так понял они возвращают имя и путь в cstring'e, а что бы добавить в listbox->items->add() необходимо object. я правильно понимаю?
если да можете ли подтолкнуть в нужную сторону, в какую копать мне)
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 19:44 10
а кто такой finder?
CFile? CFileFind? CFileDialog? или еще кто из десятка классов?
и кто тaкой listbox?
возможны варианты: listbox->AddText(), listbox->AddString()

и вообще, ты на чем пишешь? ATL? WindowForms?
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 19:50  [ТС] 11
CFileFind finder;
на windowForms там компонент listbox ..
извиняюсь за нубство(
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 20:07 12
Цитата Сообщение от NiRamz Посмотреть сообщение
на windowForms там компонент listbox ..
фактически, там ДВА компонента:
ListBox - класс (System.Windows.Forms)
ListBox - класс (System.Windows.Controls)
разные они.
впрочем, не суть важно.
Цитата Сообщение от NiRamz Посмотреть сообщение
а что бы добавить в listbox->items->add() необходимо object.
смысл не вполне понял.
нужен объект типа string. или CString, если это MFC.
хотя, как ты совмещаешь в одном проекте WindowForms и MFC(ведь CFileFind - это класс MFC) я понятия не имею. у меня такое совмещение категорически не получается.
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 20:16  [ТС] 13
вот и у меня не получается. сначало пробывал с помощью findfirstfile ...
примерно такая же ситуация получилась. сейчас вот попробывал с помощью cfilefind..

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

может для картинок есть что то конкретное?
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 20:30 14
Цитата Сообщение от NiRamz Посмотреть сообщение
может для картинок есть что то конкретное?
что конкретное? функции поиска? нет, они от формата файла не зависят.

лучше код покажи.
хоть пойму, на чем пишешь.
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 20:38  [ТС] 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define _AFXDLL
#include <afx.h>
 
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                            
                CFileFind finder;
                BOOL bWorking;
                CString tert = "c:\\*.jpg";
    
                
                bWorking = finder.FindFile(_T(tert));
                while (bWorking)
                {
                    bWorking = finder.FindNextFile();
                    //TRACE(_T("%s\n"), (LPCTSTR)finder.GetFileName());
                    //finder.GetFileName();
                    listBox1->Items->Add(finder.GetFilePath());
                }
             }
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 20:42 16
круто. невообразимый гибрид.
попробуй написать так:
C++
1
listBox1->Items->Add(string(LPCSTR(finder.GetFilePath())));
0
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 20:55  [ТС] 17
C++
1
error C2664: System::Windows::Forms::ListBox::ObjectCollection::Add: невозможно преобразовать параметр 1 из 'System::String' в 'System::Object ^'
вот ошибка вылезает какая. пробывал переводить в char. тоже такой же результат.)
listBox1->Items->Add (Convert::ToString(LPCSTR(finder.GetFilePath())));
вот так ошибки не вылазиет, но и в листбокс заносится не адрес файла, а true..
вот как то так.
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.12.2010, 21:04 18
ах, да! CLI-же...
я на такой мути не пишу.
надо что-то вроде
C++
1
listBox1->Items->Add(gcnew string(LPCSTR(finder.GetFilePath())));
1
216 / 216 / 33
Регистрация: 26.12.2010
Сообщений: 691
29.12.2010, 21:23  [ТС] 19
спасибо. все заработало)
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.