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

DLL и Функции - C++

Восстановить пароль Регистрация
 
maxturbo
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 7
25.08.2010, 21:04     DLL и Функции #1
Всем привет форумчани
Есть такой вопрос Как написать длл чтоб при вызове функции этой длл из другой программы она запускалась, ну вот к примеру...
Есть код на C+ который запускает окно
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
#define APPNAME "main"
#define APPTITLE "main"
#define _RELEASE_(p){ if(p) { (p)->Release(); (p)=NULL; };};
#define _DELETE_(p)  { if(p) { delete (p);     (p)=NULL; };};
#include <windows.h>
#include <time.h>
BOOL bActive = true;
char AppDir[1024];
HWND hWnd;
 
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
 {
 case WM_ACTIVATE:
  bActive = LOWORD(wParam);
  break;
 case WM_DESTROY:
  PostQuitMessage (0);
  break;
 case WM_SETCURSOR:
  SetCursor (NULL);
  break; 
 };
 return DefWindowProc(hWnd, message, wParam, lParam);
};
bool WindowInit (HINSTANCE hThisInst,int nCmdShow)
{
 WNDCLASS      wcl;
 wcl.hInstance  = hThisInst;
 wcl.lpszClassName = APPNAME;
 wcl.lpfnWndProc  = WindowProc;
 wcl.style   = 0;
 wcl.hIcon   = LoadIcon (hThisInst, IDC_ICON);
 wcl.hCursor   = LoadCursor (hThisInst, IDC_ARROW);
 wcl.lpszMenuName = NULL;
 wcl.cbClsExtra  = 0;
 wcl.cbWndExtra  = 0;
 wcl.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
 RegisterClass (&wcl);
 hWnd = CreateWindowEx (WS_EX_TOPMOST,APPNAME,APPTITLE,WS_OVERLAPPEDWINDOW,0, 0,640,480,NULL,NULL,hThisInst,NULL);
 if(!hWnd) return false;
 return true;
};
bool AppInit (HINSTANCE hThisInst, int nCmdShow)
{
 srand (time(0)); // randomize timer
 if(!WindowInit (hThisInst, nCmdShow)) return false;
 ShowWindow (hWnd, nCmdShow);
 UpdateWindow (hWnd);
 return true;
};
void RenderScreen (void)
{
};
WinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
 MSG msg;
 if(!AppInit (hThisInst, nCmdShow)) return false;
 
 while (1)
 {
  if(PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
  {
   if(!GetMessage (&msg, NULL, 0, 0)) break;
   TranslateMessage (&msg); 
   DispatchMessage (&msg);
  }
  else
   if(bActive) { RenderScreen (); };
 };
 return 0;
};
Как можно в создание длл описать это все одной функцией?

К примеру вот
C++
1
2
3
4
5
6
7
8
9
10
11
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define BBDECL extern "C" _declspec(dllexport)
#define BBCALL _stdcall
 
BBDECL int BBCALL MainFunction( )
{
 
return 1;
}
А уже при вызове функции MainFunction() из другой программы работал выше описанный код
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2010, 21:04     DLL и Функции
Посмотрите здесь:

C++ Экспорт функции из dll
C++ Вызов функции из dll
C++ Как взять функции из DLL?
C++ Вызов функции с DLL
C++ Вызов функции, использующей vector, из dll
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 21:27     DLL и Функции #2
так:
LoadLibrary
GetProcAddress
maxturbo
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 7
25.08.2010, 21:29  [ТС]     DLL и Функции #3
Чет там все на буржуйском а так можешь объяснить?
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 21:30     DLL и Функции #4
Цитата Сообщение от maxturbo Посмотреть сообщение
Чет там все на буржуйском
подарить словарь? в гуглпереводчик иди. или ищи раздел на форуме, по переводам.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
25.08.2010, 23:23     DLL и Функции #5
Не, ну совсем разленились:
http://msdn.microsoft.com/ru-ru/library/zzk20sxw.aspx
http://msdn.microsoft.com/ru-ru/library/64tkc9y5.aspx
maxturbo
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 7
25.08.2010, 23:26  [ТС]     DLL и Функции #6
Так это все понятно! А реально ли будет сделать чтоб этот код
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
#define APPNAME "main"
#define APPTITLE "main"
#define _RELEASE_(p){ if(p) { (p)->Release(); (p)=NULL; };};
#define _DELETE_(p)  { if(p) { delete (p);     (p)=NULL; };};
#include <windows.h>
#include <time.h>
BOOL bActive = true;
char AppDir[1024];
HWND hWnd;
 
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
 {
 case WM_ACTIVATE:
  bActive = LOWORD(wParam);
  break;
 case WM_DESTROY:
  PostQuitMessage (0);
  break;
 case WM_SETCURSOR:
  SetCursor (NULL);
  break; 
 };
 return DefWindowProc(hWnd, message, wParam, lParam);
};
bool WindowInit (HINSTANCE hThisInst,int nCmdShow)
{
 WNDCLASS      wcl;
 wcl.hInstance  = hThisInst;
 wcl.lpszClassName = APPNAME;
 wcl.lpfnWndProc  = WindowProc;
 wcl.style   = 0;
 wcl.hIcon   = LoadIcon (hThisInst, IDC_ICON);
 wcl.hCursor   = LoadCursor (hThisInst, IDC_ARROW);
 wcl.lpszMenuName = NULL;
 wcl.cbClsExtra  = 0;
 wcl.cbWndExtra  = 0;
 wcl.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
 RegisterClass (&wcl);
 hWnd = CreateWindowEx (WS_EX_TOPMOST,APPNAME,APPTITLE,WS_OVERLAPPEDWINDOW,0, 0,640,480,NULL,NULL,hThisInst,NULL);
 if(!hWnd) return false;
 return true;
};
bool AppInit (HINSTANCE hThisInst, int nCmdShow)
{
 srand (time(0)); // randomize timer
 if(!WindowInit (hThisInst, nCmdShow)) return false;
 ShowWindow (hWnd, nCmdShow);
 UpdateWindow (hWnd);
 return true;
};
void RenderScreen (void)
{
};
WinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
 MSG msg;
 if(!AppInit (hThisInst, nCmdShow)) return false;
 
 while (1)
 {
  if(PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
  {
   if(!GetMessage (&msg, NULL, 0, 0)) break;
   TranslateMessage (&msg); 
   DispatchMessage (&msg);
  }
  else
   if(bActive) { RenderScreen (); };
 };
 return 0;
};
Тоже находилось в той же dll и просто из другой программы одной функцией вызывать! Я просто новичек так что еще не очень шарю )
Yandex
Объявления
25.08.2010, 23:26     DLL и Функции
Ответ Создать тему
Опции темы

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