Zdravim.
Nacitam kniznicu funkciou LoadLibrary() a adresy funkcii a premennych GetProcAddress(), ale neviem ako nacitat objekty, ktore su v kniznici. Mate nejake napady?
Fórum › C / C++
Nacitanie objektu z DLL
zdravím,
pokud těmi objekty myslíš třídy, tak to máš bohužel smůlu protože dynamicky přes(GetProcAddres) tříy nelze načítat. Lze to sice obejít, tak že budeš vracet pointer na nějaký objekt vytvořený pomocí new v knihovně přes nějakou tebou definovanou funkcí, ale asi s tím budou akorát problémy, protože jej budeš muset uvolnit zase nějakou funkci knihovny(je to kvůli tomu, že pointery alokovány v knihovně nelze mazat přes delete/free volaném ve tvém klientském programu - nejedná se totiž o pointry pochazející z lokálního heapu). Mnohem lepší je použít příslušný *.lib a *.h soubor a kompleně se vysrat na GetProcAddress.
To Jura : lenze ja v tom DLL-ku mam nejake objekty(triedy),ktore ovladaju hardware,cize obsahuju nejake metody,ktore dany hardware napr zinicializuju..ja skratka potrebujem ziskat ich adresu, a ovladat ich, nepotrebujem ich uvolnovat
Takže ještě jednou. Dll knihovny lze připojit k programu dvěma způsoby:
1) Implicitní připojení
2) explicitní připojení
Implicitní připojení
K tomu abych mohl použít Implicitní připojení musím mít k dispozici k *.dll příslušný *.lib a *.h soubor. *.h obsahuje všechny deklarace fcí a tříd a lib obsahuje jen odkazy na implementaci do *.dll .
Postup práce s knihovnou je pak jednoduchý:
1) přilinkuju *.lib soubor k projektu
2) includuju *.h soubor
3) pracuju s funkcemi naprosto normálně - nepoužívam GetProcAddress
explicitní připojení
Tento typ se obvykle používá, když nemám k dispozici *.lib a *.h soubor. Funkce se vyhledávají právě pomocí GetProcAddress - bohužel nejde načítat TŘÍDY.
Takže pokud máš k dispozici *.lib a *.h soubor k té knihovně, tak se vyser na GetProcAdress. Pokud nemáš a psal jsi ji sám, tak si nech kompilátorem vygenerovat příslušné *.lib a *.h soubory. A pokud jsi autorem knihovny a z nějakého důvodu nechceš uvolňovat *.lib a *.h soubor, tak napiš a pak se pokusím ti poradit dále.
Pletes,protoze nema .NET knihovna nema spravny COM interface pro komunikaci.Pro nacitani dll z netu by sis musel udelat nejaky wrapper v c++/CLI (c++.NET)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Nacitanie .dll v SharpDevelop — založil Johnnny
Načítanie funkcie z vlastnej dll — založil Tocimanko
Nenašly se knihovny tbb.dll a tbb_debug.dll — založil Kevil
Import dll do me dll — založil VladislavK
Získávání sub objektů z objektu — založil Beepvix
Moderátoři diskuze