Hogyan lehet létrehozni egy import könyvtár meglévő dll - verem túlcsordulás az orosz

Számos DLL, szeretné használni az egyik a tervezet C ++. Nincs hozzáférés a forráskód vagy a fejlesztők, hogy nem. Azaz, a jelenléte egy sor DLL vesh önmagában is, és egy dokumentum, amely leírja, hogy a felület őket.

állítsa szeptember 24 '15 at 15:31

Elvileg ez egy nem támogatott forgatókönyv: például a funkció lehet díszített szokatlan módon, vagy nem szokványos hívási konvenciót.

Mindazonáltal, ha tudja a pontos funkció aláírás, akkor próbálja meg, az itt leírtak szerint.

№1 Az ötlet: létrehozni egy DEF-fájlt manuálisan. Célszerű, ha a funkciókat, hogy Ön importáló, hogy a C-funkciókat, és tudja a hívási konvenciót (például __cdecl vagy PASCAL (__stdcall)).

Először is, mi létre, hogy milyen funkciót. Használhatja a szabványos segédprogram dumpbin kulcs / export (ne felejtsük el, hogy meg kell futtatni ki a Visual Studio parancssort), vagy nagyon hasznos a fejlesztés egy natív Windows-alapú platformok Depends.exe segédprogramot.

Mert dumpbin kapsz kimenet, mint ez:

Innen veszi a nevét funkciók: AnalyseW. CloseAnalyseW stb, és kapcsolja őket .def-file ..:

Így dolgozik a funkció hívási konvenció __cdecl (ez általában az alapértelmezett). Másoknak meg kell díszíteni a funkció csak a nevet, a táblázat szerint:

(A szám után a @ a bájtok számát a verem hogy lehetővé kell tenni a paraméterek).

Most már használhatja a lib /def:yourfile.def a parancssorból Visual Studio, építeni a .lib és .exp összekapcsolni.

Az ötlet №2 -, hogy hozzon létre egy hamis könyvtár ugyanazt a funkciót aláírás, hogy építeni, és használja helyette a .lib és .exp hiányzik. Ehhez meg kell építeni a C (vagy ami még rosszabb, a C ++ -) aláírások szükséges funkciókat. Mert sishnyh funkciók (vagy azok, akik azonosították extern „C” a forrása), ez egyszerű: megnézzük a díszített nevét (például az azonos vagy Depends.exe dumpbin), határozza meg a táblázat tetején a hívási konvenció, és hozza ezt a funkciót a forráskódot. Ne felejtsük el megadni __declspec (dllexport) minden, és ezen felül extern „C” sishnyh funkciókat. Funkciókat látnak el, ahogy tetszik, úgy, hogy a fordító összeállítani.

Ha díszített C ++ - az aláírások (úgy néznek ki valami ehhez hasonló vizsgálat @@ YGXXZ.) Úgy alakíthatjuk a megfelelő C ++ - nyilatkozat felhasználásával undname segédprogram:

Ha van egy fejléc, majd a könyvtár, semmi sem kitalálni (a kockázat, hogy hibázik, és kap egy baleset) nem kell bevenni a függvény prototípusokat onnan (csak ne felejtsük el, hogy módosítsa a __declspec (dllimport) a __declspec (dllexport)).

Fordítsuk le a kapott fájlt .obj a parancs

Kulcs / c van szükség, hogy a fordító tette .obj és / Ob0 -, hogy ne véletlenül zanilaynil feladatkörök úgy tűnhet, felesleges (lehet, hogy szükség esetén az export osztály, és minden esetben nem fog fájni).

Miután .obj, akkor kap .lib és .def a parancs

Kapcsolódó cikkek