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

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

Войти
Регистрация
Восстановить пароль
 
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
#1

DLL for Windows - C++

24.11.2012, 23:31. Просмотров 397. Ответов 3
Метки нет (Все метки)

Добрый вечер,

Делаю проект, в котором необходимо подгружать dll динамически.

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
    [DllImport("kernel32.dll", SetLastError = true,
        CharSet = CharSet::Unicode, ExactSpelling = true,
        CallingConvention = CallingConvention::StdCall)]
    static HMODULE LoadLibrary(LPCTSTR lpFileName);
 
    [DllImport("kernel32.dll", SetLastError = true,
        CharSet = CharSet::Unicode, ExactSpelling = true,
        CallingConvention = CallingConvention::StdCall)]
    static BOOL FreeLibrary(HMODULE hModule);
 
    [DllImport("kernel32.dll", SetLastError = true,
        CharSet = CharSet::Unicode, ExactSpelling = true,
        CallingConvention = CallingConvention::StdCall)]
    static FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
 
    typedef int (*CFunction)();
 
    int _tmain()
    {
        HMODULE pLib = LoadLibrary(TEXT("FunctionDLL.dll"));
        if(pLib != 0)
        {
            FARPROC function = GetProcAddress(pLib, "QFunction");
            if (function != 0)
                MessageBox::Show(Convert::ToString(function()));
 
            FreeLibrary(pLib);
        }
        else
        {
            MessageBox::Show(L"Error", L"Не удалось открыт DLL");
            Close();
        }
 
        return 0;
    }
Этот кусок кода сие успешно делает, но вот сама функция из длл не импортируется (ее адрес 0). Я так полагаю, что в проблема в самой длл
Вот ее код (точнее ее примитив)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifdef __FUNCTIONDLL__
#define __FUNCTIONDLL__
 
#ifdef FUNCTIONDLL_EXPORTS
    #define FUNCTIONDLL_API __declspec(dllexport)
#else
    #define FUNCTIONDLL_API __declspec(dllimport)
#endif
 
#ifdef __cplusplus
extern "C"
{
#endif
 
FUNCTIONDLL_API int QFunction();
 
#ifdef __cplusplus
}
#endif // __cplusplus
 
#endif // __FUNCTIONDLL__
C++
1
2
3
4
5
6
7
#include "FunctionDLL.h"
 
// Пример экспортированной функции.
int QFunction()
{
    return 42;
}
Подскажите в чем мб проблема?

Добавлено через 20 минут
ну........

Добавлено через 26 минут
!!!!!!!

Добавлено через 19 минут
ну как обычно, всяким ламерам помочь вычислить факториал - тут помогут. А по нормальным вопросам - хрен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 23:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос DLL for Windows (C++):

Windows I/o без Kernel32.dll и Advapi32.dll - C++
Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования...

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

Подключение Excel к DLL в Windows 7 64 - C++
#import \ "C:\Program Files(x86)\Common Files\microsoft shared\OFFICE11\mso.dll" \ rename("DocumentProperties", "DocumentPropertiesXL")...

DLL для Windows Mobile - C++
Всем добрый день. Такая проблема: есть библиотека DLL, которая была написана для десктопных приложений. Необходимо преобразовать ее в...

DLL для Журнала Событий Windows - C++
кто-нибудь знает подходящую DLL с пустым сообщением? Например "%s" чтобы было тупо. Очень нужна именно зарегистрированная DLL.. а пустое...

Как запустить dll скомпиленную в Visual Studio 2012 в Windows XP - C++
При подключении этой dll появляется ошибка Unable to load DLL error=0 -or-, error=127 Нужны какие то системные dll от Visual Studio,...

3
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
24.11.2012, 23:40 #2
У меня вот так работает
либа
C++
1
2
#pragma once
extern "C" __declspec(dllexport) int QFunction();
C++
1
2
3
4
5
#include "FunctionDLL.h"
int QFunction()
{
    return 42;
}
проверка в консоли
длл импорт убрал
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
#include "stdafx.h"
#include <windows.h>
#pragma comment(lib,"kernel32.lib")
 
 
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
 
using namespace std;
 
 
 using namespace System;
 
 
    typedef int (*CFunction)();
 
    int main()
    {
        
        HMODULE pLib = LoadLibrary(TEXT("FunctionDLL.dll"));
        if(pLib != 0)
        {
            FARPROC function = GetProcAddress(pLib, "QFunction");
            if (function != 0)
              Console::WriteLine(Convert::ToString(function()));
 
            FreeLibrary(pLib);
        }
        else
        {
            Console::WriteLine(L"Error Не удалось открыт DLL");
          //  Close();
        }
 
        return 0;
    }
Ваш пример у меня 0
1
Миниатюры
DLL for Windows  
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
24.11.2012, 23:44 #3
Возможно бы я помог тебе, если бы знал того монстра, в котором ты это компилируешь..
0
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
24.11.2012, 23:47  [ТС] #4
MrCold, спасибо)
C++
1
#ifdef __FUNCTIONDLL__
опечатался, надо #ifndef
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 23:47
Привет! Вот еще темы с ответами:

При запуске своей проги на Windows 7, ругается на ntdll.dll - C++
Прогу пишу в BDS2006, а проблема по всей видимости из-за того, что запускать её пришлось в ОС x64... Подскажите (желательно срочно -...

Есть ли в Windows какой-нибудь стандартный "загрузчик dll"? - C++
у меня всю задачу выполняет DLL... есть ли в виндовс какойнить файл который позволяет загрузть DLL чтобы не писать прогу которая ее...

Добавление своей dll в список dll подгружаемых процессом чужого процесса - C++
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не изменяя структуры файла.

Точка входа в процедуру InterlockedCompareExchange64 не найдена в библиотеке DLL KERNEL32.DLL - C++
День добрый! При запуске моей программы (много моего кода + много разных сторонних dll) на WinXP SP2, получаем соответствующую ошибку...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
24.11.2012, 23:47
Ответ Создать тему
Опции темы

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