Vytvorenie testovacieho DLL

Programovacie jazyky, rady, poradňa...
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Vytvorenie testovacieho DLL

Príspevok od používateľa weroro »

Ahojte,

učím sa pracovať s externe volanými knižnicami a ani za boha mi nič nechce fungovať. Jazyk, v ktorom to robím je nepodstatný.
Chcem niekoho požiadať, či by mi nevytvoril DLL, v ktorom by som mohol zavolať hello world funkciu. Neviem, čo všetko mám upresniť, tak ak potrebujete viac info píšte.

Dík
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa pcsiete »

Kód: Vybrať všetko

/* dll.h */
#ifndef DLL_H
#define DLL_H

/* nezávisle na kompilátore musíš upozorniť na to, že daná funkcia má byť/bude exportovaná */
__attribute__((dllexport)) void hello_world();

#endif

Kód: Vybrať všetko

/* dll.c */
#include "dll.h"
#include <stdio.h>

void hello_world() {
	printf("Hello world!");
}

Kód: Vybrať všetko

#include <stdio.h>

/* nezávisle na kompilátore, musíš upozorniť na to, že daná funkcia má byť/bude importovaná */
__attribute__((dllimport)) void hello_world();

int main() {
	hello_world();

	return 0;
}
Zdrojové kódy knižnice kompiluješ ako -shared (/LD pre MSVC), a pri kompilovaní programu buď použiješ .def súbory s exportnými definíciami, alebo celú knižnicu (-lxxx). Záleží na jazyku a kompilátore.
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa weroro »

Nevedel by si mi to prosím skompilovať? Ide mi len o to, že potrebujem sa naučiť ako pripojiť a zavolať funkciu z DLL (to všetko v mojom jazyku tj. Actionscript for AIR). Asi si ma len zle pochopil. Chcem proste dll-ko, v ktorom viem čo je a ako to spustiť.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa pcsiete »

Aha teda potrebuješ surové DLL?
hello_world.zip
knižnica
(671 Bajtov) 51 stiahnutí
...inak ešte samotná knižnica využíva systémovú knižnicu pre štandardné C (printf).
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa weroro »

Presne tak, potrebujem len to DLL aby som ho mohol pripojiť k aplikácii napísanej v AS a aby som mohol zavolať pomocou tej aplikáciu funkciu HW z toho DLL. Niečo ako keby som chcel pracovať s frameworkom ale tvoje DLL chcem na naučenie sa pripojiť DLL k aplikácii.

Vyskúšam, to čo je v prílohe. Zatiaľ vďaka.

//autoeditácia príspevku (25 Feb 2014, 23:18)
Skúsil som to, niečo sa udialo ale nehodilo žiaden výpis, ak by si si našiel trochu času vedel by si mi to rekompilovať, tak aby tá funkcia proste iba vracala text hello world?

Kód: Vybrať všetko

string hello_world() {
   return "Hello World";
}
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa pcsiete »

Neviem aký formát reťazca používa AS, takže ti dávam dve metódy (jedna vracia 0xdeadbeef v štyroch bajtoch (little endian) a druhá reťazec "Hello World" v ASCII).
Prílohy
hello.zip
(827 Bajtov) 61 stiahnutí
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa weroro »

Chcem sa opýtať. Existuje nejaký web, kde sú rozpísané funkcie (a ich volanie/zadávanie argumentov) rôznych DLL? Mám tu napr. jedno DLL a nedokážem ho použiť, lebo netuším akú funkciu z neho volať.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Vytvorenie testovacieho DLL

Príspevok od používateľa BX »

Stiahni dependency walker ( http://www.dependencywalker.com/ ) a pozri sa, aké sú tam funkcie.
Napísať odpoveď