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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 316, средняя оценка - 4.85
Alex90
Сообщений: n/a
#1

Создание DLL - C++

29.01.2009, 20:36. Просмотров 41354. Ответов 11
Метки нет (Все метки)

Всем доброго время суток помогите мне разобраться в том как создавать .dll или подскажите литературу
Например как написать вот эту библиотеку. Я искал в интернете, но так и не понял, как ее написать

C++
1
2
3
4
Void hi ()
  {
    cout << "Hello from dll" << endl; 
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2009, 20:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание DLL (C++):

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

Создание dll библиотеки без добавления в решение - C++
Доброго времени суток. Я сделал библиотеку dll строго по http://msdn.microsoft.com/ru-ru/library/vstudio/ms235636(v=vs.100).aspx Всё...

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

При компиляции DLL-проекта не создается DLL-ка - C++
Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код: // test.cpp: определяет...

Создание DLL - C++ Builder
Windows XP 32, C++ Builder4. Система (комплекс программ) имеет тенденцию к расширению за счет подключения новых модулей.В какой-то...

Создание DLL - C++ Builder
Помогите создать DLL в C++ Builder 6 или Dev-CPP которая будет полностью анологична следующей написаной на Delphi 7: library MyDLL; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.01.2009, 20:43 #2
Какой у тя компилер? Среда?
0
Alex90
Сообщений: n/a
29.01.2009, 21:36 #3
Dev-C++ 4.9.9.2 среда разработки C++
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.01.2009, 21:42 #4
Создай новый проект, который DLL. Напиши код своей либы и собери.
0
Alex90
Сообщений: n/a
29.01.2009, 22:02 #5
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
------------------/dllmain.cpp-----------------------
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
 
DllClass:: DllClass() // Я так понимаю вот здесь нужно писать код
{
}
 
DllClass::~DllClass ()
{
}
 
BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ ) // Здесь нечего не трогаю
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;
      case DLL_PROCESS_DETACH:
        break;
      case DLL_THREAD_ATTACH:
        break;
      case DLL_THREAD_DETACH:
        break;
    }
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
P.S Я очень прошу прощения за то, что не использую код так как не вижу где тулбар
XuTPbIu_MuHTAu
Эксперт С++
2225 / 740 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
29.01.2009, 22:10 #6
Цитата Сообщение от Alex90 Посмотреть сообщение
P.S Я очень прошу прощения за то, что не использую код так как не вижу где тулбар
Тулбар - сверху,над окном отправки сообщений. Там меняется шрифт,вставляются ссылки, картинки,смайлы....и теги кода.
0
Шерсть-На-Носу
40 / 40 / 1
Регистрация: 30.01.2009
Сообщений: 168
30.01.2009, 09:43 #7
Цитата Сообщение от Alex90 Посмотреть сообщение
Всем доброго время суток помогите мне разобраться в том как создавать .dll или подскажите литературу...
Почитай вот это - http://slil.ru/26598390
0
Alex90
20 / 20 / 1
Регистрация: 30.01.2009
Сообщений: 103
30.01.2009, 15:00 #8
Создал проект

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
----------/dllrun.cpp/---------------
#include <conio.h>
#include "dlltest.h"
 
extern "C" __declspec(dllexport) void hi();
 
 void main() {
      hi ();
      cout << " TEST";
      getch();
}
 
---------/dlltest.cpp/------------------
 
#include "dlltest.h"
 
extern "C" __declspec(dllexport)
 
void hi() {
  {
cout << "Hi from Dll";
  }
}
 
----------/dlltest.h/--------------------
 
#ifndef _DLLTEST_H_
#define _DLLTEST_H_
 
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
 
extern "C" __declspec(dllexport) void hi();
 
#endif
Библиотека появилась, НО нету “dllrun.exe” Зато пишет вот такие ошибки
4 C:\Dev-Cpp\include\c++\3.4.2\backward\iostream.h:31, from dlltest.h In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31, from dlltest.h
2 F:\src\dlltest.h:4, from dllrun.cpp from dlltest.h:4, from dllrun.cpp
2 F:\src\dllrun.cpp from dllrun.cpp
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
6 F:\src\dllrun.cpp `main' must return `int'
F:\src\Makefile.win [Build Error] [dllrun.o] Error 1
0
Шерсть-На-Носу
40 / 40 / 1
Регистрация: 30.01.2009
Сообщений: 168
02.02.2009, 11:29 #9
На Dev-C++ никогда не работал, покажу, как ЭТО делается в MSVS.



dll.cpp - файл нашей dll-ки
C++
1
2
3
4
5
6
7
8
9
10
// Компилировать командой cl.exe dll.cpp /LD
 
#include <iostream.h>
 
#pragma comment(linker, "/def:DLL.def") // Указание линкеру добавить список экспорта
 
extern "C" __declspec(dllexport) void __stdcall MyFunction(void)
{
    cout << "Hi from DLL!" << endl;
}
dll.def - здесь список экспортируемых функций
C++
1
2
EXPORTS
    MyFunction
TestDll.cpp - тестовая программа
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
// Компилировать командой cl.exe TestDll.cpp
 
#include <iostream.h>
#include <windows.h>
 
typedef void (__stdcall *MYPROC)(void);
 
int main(void)
{
    cout << "Load Dll..." << endl;
 
    HMODULE hLib = LoadLibrary("DLL.dll"); // Загружаем библиотеку
    if (hLib)
    {
        cout << "Library load." << endl;
 
        MYPROC MyFunction = (MYPROC)GetProcAddress(hLib, "MyFunction"); // Загружаем функцию
        if (MyFunction) 
        {
            cout << "Function load." << endl;
 
            MyFunction(); // Вызов функции из dll!!!
        }
    }
 
    return 0;
}
Осталось только запустить TestDll.exe.
2
h4c
Сообщений: n/a
14.06.2009, 23:30 #10
Здравствуйте.
Юзаю Microsoft Visual Studio 2008... посмотрел все, что здесь предлагается и погуглил, но не заработало. Мне нужна была динамически загружаемая DLL. В итоге сделал. Выложу пример, может кому пригодится.
Вложения
Тип файла: rar example_DLL.rar (4.25 Мб, 3212 просмотров)
workster
Сообщений: n/a
08.12.2009, 19:12 #11
Цитата Сообщение от Шерсть-На-Носу Посмотреть сообщение
На Dev-C++ никогда не работал, покажу, как ЭТО делается в MSVS.



dll.cpp - файл нашей dll-ки



dll.def - здесь список экспортируемых функций

Код
EXPORTS
	MyFunction
TestDll.cpp - тестовая программа

...
Осталось только запустить TestDll.exe.
Огромное спасибо за " .def " 3 дня мучался и наконец получилось!
для чистого borland c++ 5.01 в коде (dll.cpp) не надо линку делать експорт, сильно ругается на #pragma
alexakafranc
0 / 0 / 0
Регистрация: 09.09.2009
Сообщений: 4
29.04.2010, 13:22 #12
Всем доброго времени суток!
Среда выполнения Borland Builder
проблема в вызове метода класса зашитого в dll
//содержание dll
//main.cpp
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "dll_lmain.h"
#include <stdio>
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
 
MyClass::MyClass()
{
    field =10;
}
 
bool MyClass::Message(int a,int b)
    {
      int c=  a+b;
      field = c;
     return true;
      //printf("asdds=%i",c);
    }
 
DLL_SPEC MyClass* ClassReturn()
{
    MyClass* my = new MyClass();
    return my;
}
//---------------------------------------------------------------------------
//содержание dll_main.h
C++
1
2
3
4
5
6
7
8
9
#define DLL_SPEC extern "C" __declspec(dllexport)
 
class MyClass
{
public:
    MyClass();
    int field;
    bool Message(int a,int b);
};
//Основной проект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    MyClass* (*ClassReturn)();
    MyClass* my;
    HINSTANCE hLib = LoadLibrary("mydll.dll");
    if (hLib) {
        ClassReturn= (MyClass*(*)()) GetProcAddress(hLib, "_ClassReturn");
        if (ClassReturn)
        {
            my = ClassReturn();
            Label1->Caption = IntToStr(my->field);
            my->field =3;
            //my->Message(2,3);                          //здесь выдает ошибку             
            Label2->Caption = IntToStr(my->field);
        }
    }
    FreeLibrary(hLib);
Ошибка [Linker Error] Unresolved external 'MyClass::Message(int, int)' referenced from C:\123\DLL\UNIT1.OBJ
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2010, 13:22
Привет! Вот еще темы с ответами:

Создание DLL - C++ Builder
Здравствуйте, помогите пожалуйста разобраться- не могу понять в чём ошибка. Создаю C++ Builder - DLL ...

создание и использование dll - C++ Builder
Всем доброго времени суток! Среда выполнения Borland Builder проблема в вызове метода класса зашитого в dll //содержание dll ...

Создание классов в DLL - C++ Builder
уже розобрался..Я все норм делал,ток у меня билдер 2007, а он создает пеапки дебаг и релиз и туда помещает .ехе , а .ехе не запускается...

Создание формы в dll - C++ Builder
Добрый день.Мне необходимо загрузить из dll функцию, во время выполнения которой долдна появиться форма с progressbaroм, который должен...


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

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

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