Форум программистов, компьютерный форум CyberForum.ru

Ссылка на экземпляр класса в DLL - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структуры и определение операторов для работы с ними http://www.cyberforum.ru/cpp-beginners/thread987804.html
Есть отдельный файл с базовыми структурами, которые используются во всём проекте. Есть файл с классом, в котором используется собственная структура, забивающая часть изначальных данных в остальные структуры. Внутри проекта происходят преобразования из внутренней структуры во внешние с помощью operator=. Однако сам operator= прописать в классе не удаётся. Как и можно ли это реализовать не ломая...
C++ Вычислить сколько товара можно купить без сдачи Задаётся произвольная цена товара (допустим 11,11) задается произвольное количество монет (10р 5р 2р 1р 50к 10к 5к) допустим каждой по 5 сколько можно купить пива на это количество монет (при данных условиях = 8) сколько можно купить пива без сдачи? По данным условиям мы должны придти к ответу 5 так как самой маленькой монеты (5 копеек) у нас всего 5 штук. Подскажите как можно... http://www.cyberforum.ru/cpp-beginners/thread987798.html
cstdio vs fstream C++
Есть программа, виводящяя 16-ричный дамп бинарного файла (вместо каждого байта входного файла виводится значение в 16-ричной системе) Для работы с файлами использованы функции cstdio. а нужно использовать функции fstream, как это сделать? #include <stdio.h> #include <stdlib.h> int main () { FILE * pFile; long lSize; char * buffer; size_t result;
Парсер XML файлов C++
Доброго времени. Нужен парсер для такой цели : 1) Хранить/сохранять объекты программы, и загружать обратно. Собственно, есть ли нужные библиотеки, или нужно писать парсер самому ? Если самому, то каким способом, посимвольным чтением ? Важно то, что бы он был кроссплатформенным. P.S.
C++ Объясните http://www.cyberforum.ru/cpp-beginners/thread987758.html
Вот собственно и программа... #include <stdlib.h> #include <stdio.h> #include <math.h> using namespace std; int main()
C++ Что не так с программой? Написал прогу по заданию,вроде все верно но в ответ не совпадает с тем что я решал на калькуляторе: #include<iostream> #include<conio.h> #include<math.h> #include<iomanip> using namespace std; int main() { double x; подробнее

Показать сообщение отдельно
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
25.10.2013, 23:24  [ТС]     Ссылка на экземпляр класса в DLL
Правда тут ещё WinAPI много, так я незнал куда тему создавать.
Класс Application служит для загрузки основного цикла приложения и для получения сообшений от винды.
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
//application.h
#ifndef APPLICATION_H
#define APPLICATION_H
#include <Windows.h>
#include "window.h"
class __declspec(dllexport) Application
{
public:
    Application(HINSTANCE hInstance);
    LRESULT Run();
    HINSTANCE GetInstance();
protected:
    HINSTANCE hInstance;
};
 
#endif // APPLICATION_H
 
//application.cpp
#include "application.h"
__declspec(dllexport) Application* apl = NULL;
Application::Application(HINSTANCE hInstance)
{
    this->hInstance = hInstance;
}
 
LRESULT Application::Run()
{
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
        if(msg.hwnd==NULL)
            continue;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
 
HINSTANCE Application::GetInstance()
{
    return hInstance;
}
Класс Window служит для создания объекта окна, и далешь будет развиваться в сторону абстракного класса
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//window.h
#ifndef WINDOW_H
#define WINDOW_H
#include "application.h"
#include "globals.h"
class __declspec(dllexport) Window
{
public:
    Window(DWORD dwExStyle,LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwStyle,
            int x,int y,int nWidth,int nHeight,HWND hwndParent,HMENU nIDorHMenu);
    static Window* FindWindow(HWND hWnd);
    static LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
    ~Window();
protected:
    HWND hWnd;
};
 
#endif // WINDOW_H
 
//window.cpp
#include "window.h"
#include <vector>
using namespace std;
vector<Window*> LIST;
Window::Window(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
               DWORD dwStyle, int x, int y, int nWidth, int nHeight,
               HWND hwndParent, HMENU nIDorHMenu)
{
    LIST.push_back(this);
    hWnd = NULL;
    WNDCLASSEX win;
    win.cbSize = sizeof(WNDCLASSEX);
    win.style = CS_VREDRAW|CS_HREDRAW|CS_OWNDC|CS_DBLCLKS;
    win.lpfnWndProc = Window::WinProc;
    win.cbClsExtra = 0;
    win.cbWndExtra = 0;
    win.hInstance = apl->GetInstance();
    win.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    win.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
    win.hCursor = LoadCursor(NULL,IDC_ARROW);
    win.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    win.lpszMenuName = NULL;
    win.lpszClassName = lpszClassName;
    RegisterClassEx(&win);
    hWnd = CreateWindowEx(NULL,lpszClassName,lpszWindowName,
                          WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                          x,y,nWidth,nHeight,NULL,NULL,apl->GetInstance(),NULL);
 
}
 
Window *Window::FindWindowW(HWND hWnd)
{
    if(hWnd)
    {
        Window* current;
        for(int i = 0; i<LIST.size();i++)
        {
           current = LIST[i];
           if(current->hWnd == hWnd)
               return current;
        }
    }
    return NULL;
}
 
LPARAM Window::WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_CREATE:
    {
        break;
    }
    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd,&ps);
        //перерисовка окна
        EndPaint(hWnd,&ps);
        break;
    }
    case WM_DESTROY:
    {
        Window* current = FindWindow(hWnd);
        for(int i = 0; i<LIST.size();i++)
        {
            if(LIST[i] == current)
            {
                LIST.erase(LIST.begin()+i);
            }
        }
        if(LIST.size() == 0)
            PostQuitMessage(0);
        return 0;
    }
    default:
        break;
    }
    return(DefWindowProc(hWnd,msg,wParam,lParam));
}
 
Window::~Window()
{
}
//global.h - обьявление глобальных переменных
C++
1
2
3
4
5
6
7
8
9
10
#ifndef GLOBALS_H
#define GLOBALS_H
#include <Windows.h>
#include <vector>
using namespace std;
class Application;
class Window;
extern Application* apl;
extern vector<Window*> LIST;
#endif // GLOBALS_H
Добавлено через 4 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Вероятно стоит..

А вообще классы в dll это как по мне не очень идея.
Просветите меня пожалуйста
 
Текущее время: 12:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru