Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 16:37   #1
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию dll

Создаю dll, точнее разбираю пример с http://www.cyberguru.ru/cpp-sources/...yj-shpion.html
Можете пояснить несколько строк? В смысле комментарии поставить? А то Операторы не совсем понятны

Код:
#pragma data_seg(".hdata") // секция в памяти общая для всех процессов
HINSTANCE hi=NULL; // эта переменная может изменяться любым поетому сдесь не должно быть ничего лишнего
#pragma data_seg() // конец секции
#pragma comment(linker, "/section:.hdata,rws") // даем права этой секции

#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif
что тут каждый оператор делает, вообще непонятно
Dimarik вне форума Ответить с цитированием
Старый 02.02.2011, 20:29   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

У вас же расписано половину, а во второй стандартные директивы...

__cplusplus - "показывает С++ компилятор"
p51x вне форума Ответить с цитированием
Старый 03.02.2011, 09:44   #3
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Честно говоря, я не понимаю, зачем необходимо эти секции создавать....

Разбираю пример с этого сайта (ссылка указана в первом посте).
Создал dll как было написано. *.dll, *.lib, *.exp скопировал в папку debug с новым проектом, где в последствии должен быть создан exe файл самой программы.
Далее пишу код программы. Написал точно так же как на сайте, в результате ошибки линкера:

Error 1 error LNK2019: unresolved external symbol __imp__SetKeyboardHook referenced in function _WinMain@16 C:\Documents and Settings\Dimarik\Мои документы\Visual Studio 2010\Projects\my_main_program\my_ma in_program\program.obj


Error 2 error LNK1120: 1 unresolved externals C:\Documents and Settings\Dimarik\Мои документы\Visual Studio 2010\Projects\my_main_program\Debug \my_main_program.exe 1

Затем... Прочитал статью модератора этого форума MatBeu....
Добавил
Код:
#pragma comment(lib, "dll_for_my_program.lib")
В результате получилось:

#include <windows.h>

#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif*/
#pragma comment(lib, "dll_for_my_program.lib")
IMPORT BOOL SetKeyboardHook(void);     // функция импортируемая из DLL
...И далее код программы....
В результате ошибка:

Error 1 error LNK1104: cannot open file 'dll_for_my_program.lib' C:\Documents and Settings\Dimarik\Мои документы\Visual Studio 2010\Projects\my_main_program\my_ma in_program\LINK

И почему это он не может открыть этот файл? Я его уже куда только не копировал. Во все папки с проектом даже скопировал. Нифига не работает. А почму, не знаю и понять не могу=(
Подскажите кто что знает, плиз.

Последний раз редактировалось Stilet; 05.02.2011 в 16:09.
Dimarik вне форума Ответить с цитированием
Старый 03.02.2011, 11:05   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

какая версия студии?
у меня 2010 ищет в папке с проектом(основная папка проекта именно, где по умолчанию все сорцы!)
а потом уже в папках поиска библиотек(в настройках или проекта или студии, смотря от версии) там где лежат обычные либки такие как kernel32.lib
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2011, 15:13   #5
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

user32.dll можно подключить только динамическим подключением библиотеки? То есть через LoadLibrary как написано в этой статье
http://programmersforum.ru/showthread.php?t=38078
????
Или же можно статически подключить?
P.S. Ведь без подключения user32.dll нельзя будет на API создавать элементы управления BUTTON, EDIT и т.д.?
Dimarik вне форума Ответить с цитированием
Старый 05.02.2011, 16:49   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
P.S. Ведь без подключения user32.dll нельзя будет на API создавать элементы управления BUTTON, EDIT и т.д.?
вообще то весь GUI.

статически чтоб подключить то подключайте user32.lib к проекту.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2011, 17:29   #7
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Ну. Подключил.
Код:
#include "Window_components.h"
#include "resource.h"
#include <CommCtrl.h>
#pragma comment(lib, "user32.lib")
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
	LPSTR lpCmdLine, int nCmdShow)
{
//куча кода
//...
CreateWindow(BUTTON, "Press me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
		10, 10, 80, 30, hMainWindow, NULL, hInstance, NULL);
}
Error 1 error C2065: 'BUTTON' : undeclared identifier c:\documents and settings\dimarik\мои документы\visual studio 2010\projects\blokirator\blokirator \blokirator.cpp 17

2 IntelliSense: identifier "BUTTON" is undefined c:\documents and settings\dimarik\мои документы\visual studio 2010\projects\blokirator\blokirator \blokirator.cpp 15

не знает что такое BUTTON
Dimarik вне форума Ответить с цитированием
Старый 05.02.2011, 17:38   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это вообще строка должна быть, а не переменная.
Код:
CreateWindow("BUTTON", "Press me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
		10, 10, 80, 30, hMainWindow, NULL, hInstance, NULL);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.02.2011, 17:40   #9
Dimarik
Форумчанин
 
Аватар для Dimarik
 
Регистрация: 18.04.2009
Сообщений: 688
По умолчанию

Та я просто читал что это слово определено через #define......

Всё. сделал всё как ты сказал, подключил #pragma comment(lib, "ComCtl32.Lib")
и написал
CreateWindow("BUTTON", "Press me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0, 0, 80, 30, hMainWindow, NULL, hInstance, NULL);
В результате всё компилится, а только вот кнопка не создаётся:

Последний раз редактировалось Stilet; 05.02.2011 в 20:17.
Dimarik вне форума Ответить с цитированием
Старый 05.02.2011, 19:33   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а что возвращает CreateWindow?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пытаюсь понять код user32.dll и gdi32.dll Beermonza Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 43 13.07.2010 15:09
Windows I/o без Kernel32.dll и Advapi32.dll coinkrsk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 27.06.2010 08:52
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку kapustin Общие вопросы .NET 10 23.09.2009 22:20