0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 7
1

DLL и Функции

25.08.2010, 21:04. Показов 870. Ответов 5
Метки нет (Все метки)

Всем привет форумчани
Есть такой вопрос Как написать длл чтоб при вызове функции этой длл из другой программы она запускалась, ну вот к примеру...
Есть код на 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() из другой программы работал выше описанный код
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2010, 21:04
Ответы с готовыми решениями:

Вызов функции из dll. Dll не определена в коде и подключается программно
Я написал простую функцию которая возвращает негатив bitmap'а Function Negative(ByVal Bmp As...

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

Вызов функции DLL VB.NET в DLL C++
Как вызывать функции dll VB.NET через dll С++, которая приинжекчена к процессу проводника?

Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll)
Доброго времени суток!Задали лабораторную работу: программа, написанная на с++ должна подключать...

5
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 21:27 2
так:
LoadLibrary
GetProcAddress
0
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 7
25.08.2010, 21:29  [ТС] 3
Чет там все на буржуйском а так можешь объяснить?
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 21:30 4
Цитата Сообщение от maxturbo Посмотреть сообщение
Чет там все на буржуйском
подарить словарь? в гуглпереводчик иди. или ищи раздел на форуме, по переводам.
0
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 23:23 5
Не, ну совсем разленились:
http://msdn.microsoft.com/ru-r... 20sxw.aspx
http://msdn.microsoft.com/ru-r... kc9y5.aspx
0
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 7
25.08.2010, 23:26  [ТС] 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 и просто из другой программы одной функцией вызывать! Я просто новичек так что еще не очень шарю )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2010, 23:26
Помогаю со студенческими работами здесь

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual...

В чем причина ошибки при получении адреса функции из dll с помощью функции GetProcAddress?
Здравствуйте.Не могу получить адрес функции из dll с помощью функции GetProcAddress. dll:...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете...

Затупил, скажите где взять libmysqld.dll, libmysqld50.dll, libmysqld51.dll
Вечер добрый, ставлю ZEOS на Delphi 7, и для нормальной работы нужны файлы libmysqld.dll,...


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

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

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