Windows dll hívás linux alatt

Fórumok

Sziasztok!

a tárgyban említett témával kapcsolatban érdeklődnék, hogy van-e valakinek tapasztalat ilyesmiben? Egyáltalán lehetséges? És ha igen, hogyan? [visualc++-ban windows.h-ban deklarált GetProcAddress-szel megy]

Hozzászólások

Ha DLL-t akarsz hívni, akkor legjobb esetben is dinamikusan be kell töltened egy futó programból.
Nemcsak binárisan nem kompatibilis, de a memóriakezelés/rendszerhívás is jócskán más egy win-re fordított dll esetében a linuxhoz képest.

Ha valahol van proxy erre, akkor az a libwine.

--
The Net is indeed vast and infinite...
http://gablog.eu

Kicsit homalyos a kerdes. Nem csak arra utalt, hogy a windows LoadLibrary/GetProcAddress hivasoknak mi az analog megfeleloje Linuxon?

Nos ha linuxon linuxos shared objectet akarsz dinamikusan betolteni, akkor a dlfcn.h -ban levo dlopen es dlsym a te baratod.

Ha megis linuxon akarsz windowson forditott dll-t hasznalni, akkor a winegcc lesz a te embered (talan)....

igazad van nem fogalmaztam elég pontosan a célt: windows alatt forgatott dll-t szeretnék linuxos alkalmazásban használni. és ehhez örültem volna némi segítségnek hogyan lehet közvetlenül meghívni függyvényeket egy dll-ből. nos mint fentebb írtátok ez az út tényleg tök hülyeség...

viszont sikerült megoldást szülnöm: wineg++ segített így a szükséges függvényekkel létrehozok egy library-t, amit már vígan használhatok :)

köszönöm mindenkinek!

újabb problémába ütköztem...

ugye sikerült leforgatnom(wineg++) egy a dll-t használó fájlt és így létrejött egy valami.o fájlom. na most ezt innentől gcc-vel szeretném tovább használni,de a gcc nyavalyog, hogy


... undefined reference to `LoadLibraryA'
...
... undefined reference to `GetProcAddress'
...
... undefined reference to `FreeLibrary'
...

szerintetek lehetséges, hogy valami winelib hozzálinkelésével ez megszűnik, vagy maradnom kell a winegcc-nél?

[lehet hogy nagyon láma vagyok, de...]
még mindig nem megy, szval az első próbálkozásom:


g++ MorphTools.o -L/usr/lib/wine -lkernel32
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
MorphTools.o: In function `MorphTools::init(char*, char*, int, int)':
MorphTools.cpp:(.text+0x608): undefined reference to `LoadLibraryA'
MorphTools.cpp:(.text+0x635): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x655): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x675): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x695): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x6d3): undefined reference to `FreeLibrary'
/usr/bin/ld: a.out: hidden symbol `FreeLibrary' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status

és a második. [bár konkrétan libkernel32.so nem létezik de van helyette .def (gyanítom valami deklarációs féleség) és kernel32.dll.so a /usr/lib/wine-ban(ezt amúgy lehet csak úgy explicite csapni a fordításhoz?)]


g++ MorphTools.o -L/usr/lib/wine -lwine
/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
MorphTools.o: In function `MorphTools::init(char*, char*, int, int)':
MorphTools.cpp:(.text+0x608): undefined reference to `LoadLibraryA'
MorphTools.cpp:(.text+0x635): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x655): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x675): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x695): undefined reference to `GetProcAddress'
MorphTools.cpp:(.text+0x6d3): undefined reference to `FreeLibrary'
/usr/bin/ld: a.out: hidden symbol `FreeLibrary' isn't defined
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: ld returned 1 exit status

próbálkoztam még wineg++ -static... -szal de olyanja neki nincsen :(

egyre inkább azt érzem, hogy nem lehetséges amibe belevágtam...

pls hlp. :(

az mplayer-ben van egy eleg minimalista dll loader. ha az nem eleg (mert sok mas dll-t, windoz speci fuggvenyeket hiv a betoltendo dll-ed) akkor meg marad a libwine...

A'rpi