Консультация № 195902
23.06.2019, 14:31
0.00 руб.
0 4 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

учусь создавать dll файлы, я использую g++ (MinGW.org GCC-8.2.0-1) 8.2.0 и у меня есть файлы

mylib.h

#ifndef MYLIB_H
#define MYLIB_H
extern "C" __declspec(dllexport) int fun();
#endif MYLIB_H
mylib.cpp

#include "mylib.h"
extern "C" __declspec(dllexport) int fun(){
return 1;
};
так вот как скомпилировать библиотеку dll, с помощью g++?

Обсуждение

давно
Посетитель
7438
7205
24.06.2019, 10:38
общий
Адресаты:
Как минимум, в mylib.cpp необходимо добавить функцию (в минимальной конфигурации)
Код:
BOOL APIENTRY DllMain( HANDLE hModule, 
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
return TRUE;
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
401281
56
24.06.2019, 21:26
общий
24.06.2019, 21:27
так вот как скомпилировать библиотеку dll, с помощью g++?

решил это вот так, сначала изменил файлы:
mylib.h
Код:
#ifndef MYLIB_H
#define MYLIB_H

#ifdef BUILDING_EXAMPLE_DLL
#define EXAMPLE_DLL __declspec(dllexport)
#else
#define EXAMPLE_DLL __declspec(dllimport)
#endif

int __stdcall EXAMPLE_DLL fun();

#endif MYLIB_H

mylib.cpp
Код:
#include "mylib.h"

__stdcall int fun()
{
return 1;
}

и в командной строке набрал:
Код:

g++ -c -DBUILDING_EXAMPLE_DLL mylib.cpp
g++ -shared -o mylib.dll mylib.o -Wl,--out-implib,mylib.a

получил файл mylib.dll, добавил в файл example_dll.cpp код
Код:
#include <iostream>
#include "mylib.h"

int main(void){

std::cout << fun();

return 0;
}

скомпилил и запустил
Код:

g++ -c example_dll.cpp
g++ -o example_dll.exe example_dll.o -L. -lmylib

example_dll.exe
1

давно
Посетитель
401281
56
24.06.2019, 21:39
общий
Адресаты:
спасибо вам за ответ, поискал в интернете про DllMain (Динамические библиотеки для гурманов, Функция DLLMain() )и если я правильно понял то это функция нужна когда в библиотеке при подключении необходимо что то проинициализировать или получить память, если я конечно правильно понял,что если просто в библиотеке функция которая принимает в качестве аргументов 4 double переменный для просчета допустим столкновений двух объектов и возращает булевское значение, все равно нужно прописывать данную функцию?
давно
Посетитель
7438
7205
26.06.2019, 10:38
общий
Адресаты:
Лично я всегда добавлял функцию DllMain. Можно ли без нее обойтись? Попробуйте.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа