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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 68, средняя оценка - 4.71
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
#1

LoadLibrary() - C++

23.05.2011, 04:09. Просмотров 8902. Ответов 18
Метки нет (Все метки)

Вызываю LoadLibrary() (файл dll4.dll лежит в каталоге экзешника)
C++
1
HMODULE hdll1 = LoadLibraryA("dll4.dll");
по getlasterror получаю ошибку - 14001 = Приложение не было запущено, поскольку оно некорректно настроено. Повторная установка приложения может решить данную проблему.

или так вызываю
C++
1
2
LPCWSTR pbuft = _T("C:\Documents and Settings\er\Мои документы\Visual Studio 2010\Projects\loaddll4\Debug\dll4.dll");
HMODULE hdll1 = LoadLibrary("pbuft");
по getlasterror получаю ошибку 126 = Не найден указанный модуль.
по моему дело в unicode.
я пишу в ms vs ultimate 2010
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Danvern
40 / 39 / 3
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
23.05.2011, 08:53     LoadLibrary() #2
LPCWSTR pbuft = _T("C:\\Documents and Settings\\er\\Мои документы\\Visual Studio 2010\\Projects\\loaddll4\\Debug\\dll4.dll");
HMODULE hdll1 = LoadLibrary(pbuft);

помойму всё делается вот так


а ещё про первую запись забыл сказать когда компилируешь из среды все файлы которых должны запускаться вместе с exe должны лежать вот в этой папке
C:\Documents and Settings\er\Мои документы\Visual Studio 2010\Projects\loaddll4\loaddll4\dll4.dll
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
23.05.2011, 09:16  [ТС]     LoadLibrary() #3
результат такой же
Danvern
40 / 39 / 3
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
23.05.2011, 12:55     LoadLibrary() #4
тогда попробуй положить файл рядом с екзе и запусти екзе двумя кликами
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
24.05.2011, 00:27  [ТС]     LoadLibrary() #5
ничего не получается.
Digit@ll
Brainsbreaker
869 / 347 / 27
Регистрация: 01.02.2011
Сообщений: 1,496
24.05.2011, 01:47     LoadLibrary() #6
А что это за dll? Выложи ее где-нибудь, чтоб посмотреть.
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
24.05.2011, 02:26  [ТС]     LoadLibrary() #7
простая dll
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include "winnt.h"
#include "windows.h"
#include "stdio.h"
 
 
 
    extern "C" __declspec (dllexport) void dllfunc1()
{
    char buf [128];
    sprintf(buf, "Test", 0);
    MessageBoxA(NULL, buf, "Information", 0);
}
Digit@ll
Brainsbreaker
869 / 347 / 27
Регистрация: 01.02.2011
Сообщений: 1,496
24.05.2011, 07:32     LoadLibrary() #8
MSVS 2008: компилится, грузится, только ничего не выводит.
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
24.05.2011, 08:23  [ТС]     LoadLibrary() #9
какой проект ты создавал
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 13:04     LoadLibrary() #10
Рабочая директория и директория ехе-файла в MSVC по умолчанию не совпадают. На вкладке Debug пропиши рабочую директорию туда же, куда и ехе-файл.

Добавлено через 36 секунд
Цитата Сообщение от korez Посмотреть сообщение
#include "stdafx.h" #include "winnt.h" #include "windows.h" #include "stdio.h" extern "C" __declspec (dllexport) void dllfunc1() { char buf [128]; sprintf(buf, "Test", 0); MessageBoxA(NULL, buf, "Information", 0); }
ОМГ! ЭТО не DLL.
schdub
2935 / 1279 / 237
Регистрация: 19.01.2009
Сообщений: 3,343
Завершенные тесты: 1
24.05.2011, 14:27     LoadLibrary() #11
Цитата Сообщение от Deviaphan Посмотреть сообщение
ОМГ! ЭТО не DLL.
+1

Цитата Сообщение от korez Посмотреть сообщение
простая dll
Вот почитайте о Dynamic-Link Library Entry-Point Function
Digit@ll
Brainsbreaker
869 / 347 / 27
Регистрация: 01.02.2011
Сообщений: 1,496
24.05.2011, 15:46     LoadLibrary() #12
Цитата Сообщение от korez Посмотреть сообщение
какой проект ты создавал
Консольная dll.

Так а что это вообще за шняга? О_о

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include "winnt.h"
#include "windows.h"
#include "stdio.h"
 
 
 
        extern "C" __declspec (dllexport) void dllfunc1()
{
        char buf [128];
        sprintf(buf, "Test", 0);
        MessageBoxA(NULL, buf, "Information", 0);
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 15:49     LoadLibrary() #13
Это шняга, да.
У тебя нет точки входа. DllMain, например.
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
25.05.2011, 10:39  [ТС]     LoadLibrary() #14
компилятор dllmain создает автоматически или как

Добавлено через 2 часа 13 минут
вот так тоже ничего не входит
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
// dll4.cpp: определяет экспортированные функции для приложения DLL.
//
 
#include "stdafx.h"
#include "winnt.h"
#include "windows.h"
#include "stdio.h"
//#include "incl.h"
 
    BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)  
{
    switch(dwReason)
    {
        case DLL_PROCESS_ATTACH:
        break;
        case DLL_PROCESS_DETACH:
        break;
        case DLL_THREAD_ATTACH:
        break;
        case DLL_THREAD_DETACH:
        break;
    }
}
 
    extern "C" __declspec (dllexport) void dllfunc1()
{
    char buf [128];
    sprintf(buf, "Test", 0);
    MessageBoxA(NULL, buf, "Information", 0);
}
я вот так пытаюсь скомпилировать он мне даже говорит что
1>C:\Documents and Settings\er\Мои документы\Visual Studio 2010\Projects\dllt1\Debug\dllt1.dll : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>
то есть dllmain уже определена (если ее убрать все скомпилируется)
и компилировал я вот так консольное приложение - dll
Но там еще есть "пустой проект" и "экспорт символов" это зачем.
PB
Просто прогер
1278 / 1065 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
25.05.2011, 16:15     LoadLibrary() #15
Попробуй вызвать DLL из вложения.
В ней одна функция dllfunc1 без аргументов. Формат вызова - stdcall.
Если ее нормально вызовет, то проблема в вашей DLL.
Отпишитесь о результатах.
Вложения
Тип файла: rar dll4.rar (1.3 Кб, 39 просмотров)
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
25.05.2011, 22:02  [ТС]     LoadLibrary() #16
вот так вызываю
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
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "incl.h"
//#include <inclm.h>
 
void nulstruc(statep &struc1);
void rcoin(statep &struc1);
void crpost(statep &struc1);
void changename(statep &struc1);
 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
 
    //LPCWSTR pbuft = _T("C:\Documents and Settings\er\Мои документы\Visual Studio 2010\Projects\loaddll4\dll4.dll");
 
    char buft [50];
    HMODULE hdll1 = LoadLibraryA("dll4.dll");
    int er = GetLastError();
    sprintf(buft, "%d", er );
    MessageBoxA(NULL, buft, "information", MB_OK);
    //sprintf(buft, "%x", hdll1 );
    //MessageBoxA(NULL, buft, "information", MB_OK);
    FARPROC pdllfunc1 = GetProcAddress(hdll1, "dllfunc1");
    //sprintf(buft, "%x", pdllfunc1 );
    //MessageBoxA(NULL, buft, "information", MB_OK);
    (*pdllfunc1);
    FreeLibrary(hdll1);
 
    return 0;
}
ничего не происходит

Добавлено через 30 минут
PB, если вызываю твою getlasterror = 0, если свою то 127 -Не найдена указанная процедура.

Добавлено через 1 минуту
твоя dll весит 4,5 килобайт моя - 27 килобайт.
ты в чем пишешь и как создаешь проект
PB
Просто прогер
1278 / 1065 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
25.05.2011, 22:16     LoadLibrary() #17
Цитата Сообщение от korez Посмотреть сообщение
PB, если вызываю твою getlasterror = 0, если свою то 127 -Не найдена указанная процедура.
Значит что-то не так в коде твоей dll.

Цитата Сообщение от korez Посмотреть сообщение
твоя dll весит 4,5 килобайт моя - 27 килобайт.
ты в чем пишешь и как создаешь проект
Моя dll на бейсике (PureBasic).
Ее исходник.
Код
ProcedureDLL dllfunc1()
  MessageRequester("Information", "Test")
EndProcedure
Digit@ll
Brainsbreaker
869 / 347 / 27
Регистрация: 01.02.2011
Сообщений: 1,496
25.05.2011, 22:43     LoadLibrary() #18
А-ну попробуй эту (не архив):

dll4.dll.rar
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2011, 13:26     LoadLibrary()
Еще ссылки по теме:

C++ WinAPI Код ошибки 127 после вызова LoadLibrary
Ошибка 126 в LoadLibrary C++ Builder
Повесить хук на LoadLibrary C#
Windows 7 Окно с сообщением об ошибке "LoadLibrary failed with error 87: Параметр задан неверно."

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

Или воспользуйтесь поиском по форуму:
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 182
26.05.2011, 13:26  [ТС]     LoadLibrary() #19
Digit@ll, твоя работает но
твое сообщение Test выводится до getlasterror
getlasterror = 1400 = Недопустимый дескриптор окна. потом опять Test.

Добавлено через 5 часов 21 минуту
Digit@ll, в чем тф пишешь и как ты компилировал?
Yandex
Объявления
26.05.2011, 13:26     LoadLibrary()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru