A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
oktatas:programozas:c:mingw_dll [2017/10/02 20:29] |
oktatas:programozas:c:mingw_dll [2019/08/21 18:35] admin létrehozva |
||
---|---|---|---|
Sor 1: | Sor 1: | ||
+ | [[:oktatas:programozás:c|< C]] | ||
+ | |||
+ | ====== MingW DLL ====== | ||
+ | |||
+ | ===== DLL készítése Linux alatt ===== | ||
+ | |||
+ | |||
+ | <code c Makefile> | ||
+ | main.exe: main.c | ||
+ | i586-mingw32msvc-gcc -o main.exe main.c kiir.dll | ||
+ | </code> | ||
+ | |||
+ | |||
+ | <code c kiir.h> | ||
+ | void ir(void); | ||
+ | </code> | ||
+ | |||
+ | |||
+ | <code kiir.c> | ||
+ | #include <stdio.h> | ||
+ | #include "kiir.h" | ||
+ | void ir() | ||
+ | { | ||
+ | printf("Helló Világ\n"); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | A dll fordítása (Linux alatt): | ||
+ | <code bash> | ||
+ | sudo apt-get install mingw32 | ||
+ | i586-mingw32msvc-gcc -c kiir.c | ||
+ | i586-mingw32msvc-gcc -shared -o kiir.dll kiir.o | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | A DLL használata: | ||
+ | |||
+ | |||
+ | |||
+ | <code c main.c> | ||
+ | #include <stdio.h> | ||
+ | main() | ||
+ | { | ||
+ | ir(); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Még egyszer ===== | ||
+ | |||
+ | Az alábbiak Windowson MinGW32 fordítóval működnek. | ||
+ | ==== A DLL létrehozása ==== | ||
+ | |||
+ | <code c sajat.c> | ||
+ | __declspec(dllexport) int __cdecl dupla(int szam) | ||
+ | { | ||
+ | return 2 * szam; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | <code makefile Makefile> | ||
+ | sajat.dll: sajat.c | ||
+ | gcc -c -o sajat.o sajat.c | ||
+ | gcc -o sajat.dll -s -shared sajat.o -Wl,--subsystem,windows | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | ==== A DLL felhasználása ==== | ||
+ | |||
+ | <code c main.c> | ||
+ | #include <stdlib.h> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | __declspec(dllimport) int __cdecl dupla(int szam); | ||
+ | |||
+ | int main(int argc, char** argv) | ||
+ | { | ||
+ | printf("%d\n", dupla(6)); | ||
+ | |||
+ | return EXIT_SUCCESS; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | |||
+ | <code makefile Makefile> | ||
+ | main.exe: main.c | ||
+ | gcc -c -o main.o main.c | ||
+ | gcc -o main.exe -s -L. -lsajat main.o | ||
+ | </code> | ||
+ | |||
+ | A -s kapcsoló a szimbólumtábla törlésére ad utasítást. | ||
+ | A -L. kapcsolóval megmondjuk, hogy a -l kapcsoló után megadott | ||
+ | állományt, az aktuális könyvtárban kell keresni. | ||
+ | |||
+ | ===== Linkek ===== | ||
+ | * http://www.transmissionzero.co.uk/computing/building-dlls-with-mingw/ | ||
+ | * http://wyw.dcweb.cn/stdcall.htm | ||
+ | * http://www.cygwin.com/cygwin-ug-net/dll.html | ||
+ | * http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs | ||
+ | * http://www.mingw.org/wiki/sampleDLL | ||
+ | |||
+ | |||
+ | |||