Jak się tworzy biblioteki DLL
Ostatnio zmodyfikowano 2009-01-02 23:16
pekfos Temat założony przez niniejszego użytkownika |
Jak się tworzy biblioteki DLL » 2009-01-01 18:14:56 mam pytanie: czy wie ktoś jak się tworzy biblioteki dll? |
|
DejaVu |
» 2009-01-01 18:18:44 Szkielet programu opisany w poście: http://archiwum.ddt.pl/?TextId=7076. Poza tymi kilkoma linijkami 'specjalnego' kodu dla pliku *.dll tworzy się je tak samo jak zwykły plik nagłówkowy i źródłowy. W pliku *.h: int funkcja( int paramert1, std::string parametr2 ); w pliku *.cpp: int funkcja( int paramert1, std::string parametr2 ) { return 0; } /edit: Dodatkowo załączam link do tematu odnośnie obsługi DLL'a: Jak obsługiwać pliki DLL (podpinanie do programu) |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-01-01 18:30:53 narazie tylko 2 pytania: 1.czy w pliku *.h coś takiego int funkcja( int paramert1, std::string parametr2 ); zamieszcza się w klasie DLLIMPORT DllClass czy poza nią? 2.gdzie w pliku *.cpp wpisuje się ciało funkcji zamieszczonej w pliku *.h? |
|
DejaVu |
» 2009-01-02 02:47:48 Wydaje mi się, że DllClass to przykład tylko jak wyeksportować klasę własną do dll'ki. Jeśli chcesz wyeksportować funkcję, a nie działa Ci zapis wcześniejszy który gdzieś przytoczyłem to może musisz dopisać DLLIMPORT przed nazwą funkcji lub na samym początku definicji funkcji. Przyznam się, że obecnie strzelam i musiałbym poeksperymentować metodą prób i błędów, bowiem nie mam szerokich doświadczeń w tym temacie. Myślę jednak, że to jest nie więcej niż 15min intensywnych eksperymentów z kompilowaniem i proszę o podjęcie prób przez Was osobiście i podzielenie się ich efektami. Jeśli Wam się nie uda, to zajmę się tym, jednak nie wiem o której... kto wymyślił taką krótką dobę :( |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-01-02 11:13:22 dodanie DLLIMPORT na początku funkcji(przynajmniej u mnie) zmienia tylko komunikat błędu |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-01-02 16:36:01 dobre.. ale u mnie nie działa.. no może troche.. znowu inny [Linker Error] oto kod: #include "dajglos.h" #include <iostream> #include <conio.h> int main() { int a; a = get64(); std::cout << a; getch(); return 0; } a to kody dll: #include "dajglos.h" #include <windows.h>
int DLLFUNCTION get64( void ) { return( 64 ); }
BOOL APIENTRY DllMain( HINSTANCE hInst , DWORD reason , LPVOID reserved ) { switch( reason ) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; }
#ifndef _dajglos_H_ #define _dajglos_H_
#if BUILDING_DLL # define DLLFUNCTION __stdcall __declspec (dllexport) #else # define DLLFUNCTION __stdcall __declspec (dllimport) #endif
int DLLFUNCTION get64( void );
#endif
[Linker error] undefined reference to `_imp___Z5get64v@0' ld returned 1 exit status |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-01-02 18:47:42 w którym pliku i gdzie w nim wpisać te "extern C" i jak się je pisze? :D |
|
pekfos Temat założony przez niniejszego użytkownika |
» 2009-01-02 18:58:25 ekhm.. coś te extern C chyba nie jest potrzebne bo jak tylko podpiołem liba to się przekompilowało i działa :) a tak wogule co robi te extern C? |
|
« 1 » 2 3 |