2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
1

CMainWnd на VS2010

25.02.2011, 17:29. Показов 1936. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
CMainWnd::CMainWnd()
{
    Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,
        NULL,NULL); // Создать окно программы
}
Выдаёт ошибку

>c:\users\alexander lyapunov\documents\visual studio 2010\projects\mfcdll\mfcdll\mfcdll.cpp(53): error C2664: 'CFrameWnd::Create' : cannot convert parameter 2 from 'long' to 'LPCTSTR'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

остальные аргументы, кроме первого, ему тоже не нравятся. Даже если C-style - почему бы и не пропустить?
Как исправить? Полный код

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// MFCDLL.cpp : Defines the initialization routines for the DLL.
//
 
#include "stdafx.h"
#include "MFCDLL.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
//
//TODO: If this DLL is dynamically linked against the MFC DLLs,
//      any functions exported from this DLL which call into
//      MFC must have the AFX_MANAGE_STATE macro added at the
//      very beginning of the function.
//
//      For example:
//
//      extern "C" BOOL PASCAL EXPORT ExportedFunction()
//      {
//          AFX_MANAGE_STATE(AfxGetStaticModuleState());
//          // normal function body here
//      }
//
//      It is very important that this macro appear in each
//      function, prior to any calls into MFC.  This means that
//      it must appear as the first statement within the 
//      function, even before any object variable declarations
//      as their constructors may generate calls into the MFC
//      DLL.
//
//      Please see MFC Technical Notes 33 and 58 for additional
//      details.
//
 
// CMFCDLLApp
 
BEGIN_MESSAGE_MAP(CMFCDLLApp, CWinApp)
END_MESSAGE_MAP()
 
 
// CMFCDLLApp construction
 
class CMainWnd : public CFrameWnd
{
public:
    CMainWnd(); // Конструктор по умолчанию
};
 
CMainWnd::CMainWnd()
{
    Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,
        NULL,NULL); // Создать окно программы
}
 
class CMyApp : public CWinApp
{
public:
    CMyApp();           //конструктор по умолчанию
    virtual BOOL InitInstance();//стандартная инициализация
};
 
CMyApp::CMyApp() // конструктор главного класса приложения
{}
 
 
// CMFCDLLApp initialization
 
BOOL CMFCDLLApp::InitInstance()
{
    CWinApp::InitInstance();
    m_pMainWnd=new CMainWnd();  // создать класс окна
    ASSERT(m_pMainWnd); // проверить его правильность
    m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно
    m_pMainWnd->UpdateWindow(); // Обновить окно
    return TRUE;
 
    return TRUE;
}
Добавлено через 16 минут
L там добавил, ладно. Следующая ошибка:

1>MFCDLL.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CMyApp::InitInstance(void)" (?InitInstance@CMyApp@@UAEHXZ)
1>c:\users\alexander lyapunov\documents\visual studio 2010\Projects\MFCDLL\Debug\MFCDLL.dll : fatal error LNK1120: 1 unresolved externals
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2011, 17:29
Ответы с готовыми решениями:

C# VS2010 мот кто скинит книгу или ссылку даст на скачку?? (vs2010 rus)
C# VS2010 мот кто скинит книгу или ссылку даст на скачку?? (vs2010 rus)

CUDA 4.0 и VS2010
хочу написать программу на CUDA под VS2010, но сталкиваюсь с проблемой когда создаю заголовочный...

Графика в VS2010
Здравствуйте. Возможно ли в Консольном приложении Visual Studio 2010 использовать графику, как...

sockets vs2010
Доброго времени суток. Решил написать небольшой месседжер на с++. Возник вопрос, а есть ли уже...

4
Модератор
Эксперт по электронике
8782 / 6568 / 891
Регистрация: 14.02.2011
Сообщений: 23,055
27.02.2011, 00:21 2
C++
1
2
3
4
5
CMainWnd::CMainWnd()
{
        Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,
                NULL,NULL);     // Создать окно программы
}
я не понял что ты создаешь???
если ты хочешь создать окно то
может так
C++
1
2
CWnd wnd;
wnd.Create
пример MSDN
void CMyDlg::OnCreateStatic()
{
// m_pWndStatic is a CWnd* member of CMyDlg
m_pWndStatic = new CWnd;
m_pWndStatic->Create(_T("STATIC"), _T("Hi"), WS_CHILD | WS_VISIBLE,
CRect(0, 0, 20, 20), this, 1234);
}
если ты создаешь окно производное от CWnd кнопки списки и т.д то вызывай этот класс
у каждого класса свой Create
если ты на на API
то CreateWindow(


если ты создаешь от CFrameWnd
то вот описание ее
virtual BOOL Create(
LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_OVERLAPPEDWINDOW,
const RECT& rect = rectDefault,
CWnd* pParentWnd = NULL,
LPCTSTR lpszMenuName = NULL,
DWORD dwExStyle = 0,
CCreateContext* pContext = NULL
);
у тебя конкретно выскочила ошибка что он не может перевести имя в UNICODE
или убери в настройках проэкта использовать UNICODE или переводи сам L
на 2008 2010 лучше все строки описывать _T("AAAAA")
макрос _T сам переведет строку в нужную кодировку в зависимости от настроек
по второму вопросу
class CMyApp : public CWinApp
{
public:
CMyApp(); //конструктор по умолчанию
virtual BOOL InitInstance();//стандартная инициализация
.................................................. ...
BOOL CMFCDLLApp::InitInstance()
{

это ниче что классы разные???
линкер и не находит у тебя функции InitInstance() класса CMyApp
которая объявлена но не определена
С уважением Валерий
1
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
28.02.2011, 10:54  [ТС] 3
Валерий, спасибо что откликнулись. Создаю пустое окно.

Пробовал запустить его в VS2008 Express - но не работал, судя по всему из за того что она не поддерживает MFC библиотеки. Установил VS 2010 Premium. Там есть отдельные проекты MFC. Из предложенных 3х вариантов ( MFC приложение - exe, MFC - библиотека - dll и ещё что-то) выбрал библиотеку dll, хотя сейчас думаю, что если создаю окно, то надо было приложение exe выбирать.
Выскочило много ошибок которых я раньше не видел ( помимо самого кода, в котором тоже надо разобраться сначала ), поэтому разбираюсь с ними сижу.

По второму вопросу - спасибо снова, сейчас буду исправлять. Заодно создам проект как MFC приложение сразу.

Добавлено через 51 минуту
Сделал все исправления в моём проекте(dll), ошибок не выдаёт. Но, когда запускает, вылазит ошибка

---------------------------
Microsoft Visual Studio
---------------------------
Unable to start program 'C:\Users\Alexander Lyapunov\Documents\Visual Studio 2010\Projects\MFCDLL\Debug\MFCDLL.dll'.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// MFCDLL.cpp : Defines the initialization routines for the DLL.
//
 
#include "stdafx.h"
#include "MFCDLL.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
//
//TODO: If this DLL is dynamically linked against the MFC DLLs,
//      any functions exported from this DLL which call into
//      MFC must have the AFX_MANAGE_STATE macro added at the
//      very beginning of the function.
//
//      For example:
//
//      extern "C" BOOL PASCAL EXPORT ExportedFunction()
//      {
//          AFX_MANAGE_STATE(AfxGetStaticModuleState());
//          // normal function body here
//      }
//
//      It is very important that this macro appear in each
//      function, prior to any calls into MFC.  This means that
//      it must appear as the first statement within the 
//      function, even before any object variable declarations
//      as their constructors may generate calls into the MFC
//      DLL.
//
//      Please see MFC Technical Notes 33 and 58 for additional
//      details.
//
 
// CMFCDLLApp
 
BEGIN_MESSAGE_MAP(CMFCDLLApp, CWinApp)
END_MESSAGE_MAP()
 
 
// CMFCDLLApp construction
 
class CMainWnd : public CFrameWnd
{
public:
    CMainWnd(); // Конструктор по умолчанию
};
 
CMainWnd::CMainWnd()
{
    Create(NULL,_T("Step1"),WS_OVERLAPPEDWINDOW,rectDefault,
        NULL,NULL); // Создать окно программы
}
 
class CMyApp : public CWinApp
{
public:
    CMyApp();           //конструктор по умолчанию
    virtual BOOL InitInstance();//стандартная инициализация
};
 
CMyApp::CMyApp() // конструктор главного класса приложения
{}
 
 
// CMFCDLLApp initialization
 
BOOL CMyApp::InitInstance()
{
    CWinApp::InitInstance();
    m_pMainWnd=new CMainWnd();  // создать класс окна
    ASSERT(m_pMainWnd); // проверить его правильность
    m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно
    m_pMainWnd->UpdateWindow(); // Обновить окно
    return TRUE;
 
    return TRUE;
}
Проблема явно с настройками.
0
1 / 1 / 1
Регистрация: 05.05.2012
Сообщений: 159
20.10.2014, 13:24 4
Поменяй библиотеку, в настройках проекта. И вот это поменяй!)
C++
1
2
3
4
5
CMainWnd::CMainWnd()
{
    Create(NULL, L"Step1", WS_OVERLAPPEDWINDOW, rectDefault,
        NULL, NULL);    // Создать окно программы
}
0
Модератор
Эксперт по электронике
8782 / 6568 / 891
Регистрация: 14.02.2011
Сообщений: 23,055
20.10.2014, 13:47 5
Цитата Сообщение от zZzTipo4ekzZz Посмотреть сообщение
Поменяй библиотеку,
это ему очень пригодится, через три с половиной года
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2014, 13:47
Помогаю со студенческими работами здесь

Окна в VS2010 ?
Помагите случайно закрыл окна старотовые и как их вернуть ? скрин дам !

Интерфейс в VS2010
:facepalm:При программировании хочу видеть описание типов, помниться мне что была какая та такая...

Асинхронность в VS2010
Возможно ли использование асинхронности в VS2010, async & wait В одной статье написано что...

Компиляция на VS2010
Во вложенном архиве в папке src лежат исходники open source проекта. По каким-то причинам, в том...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru