Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak się tworzy biblioteki DLL

Ostatnio zmodyfikowano 2009-01-02 23:16
Autor Wiadomość
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?
P-3161
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:
C/C++
int funkcja( int paramert1, std::string parametr2 )
{
    //tutaj kod...
    return 0;
}

/edit:
Dodatkowo załączam link do tematu odnośnie obsługi DLL'a:
Jak obsługiwać pliki DLL (podpinanie do programu)
P-3162
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?
P-3164
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ę :(
P-3193
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
P-3195
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:
C/C++
#include "dajglos.h"
#include <iostream>
#include <conio.h>
int main()
{
    int a;
    a = get64();
    std::cout << a;
    getch();
    return 0;
}
a to kody dll:
C/C++
/* Replace "dll.h" with the name of your header */
#include "dajglos.h"
#include <windows.h>
/*
DllClass::DllClass()
{

}


DllClass::~DllClass ()
{

}
*/

int DLLFUNCTION get64( void )
{
    return( 64 );
}

BOOL APIENTRY DllMain( HINSTANCE hInst /* Library instance handle. */,
DWORD reason /* Reason this function is being called. */,
LPVOID reserved /* Not used. */ )
{
   
    switch( reason )
    {
    case DLL_PROCESS_ATTACH:
        break;
       
    case DLL_PROCESS_DETACH:
        break;
       
    case DLL_THREAD_ATTACH:
        break;
       
    case DLL_THREAD_DETACH:
        break;
    }
   
    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}
C/C++
#ifndef _dajglos_H_
#define _dajglos_H_

#if BUILDING_DLL
# define DLLFUNCTION __stdcall __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLFUNCTION __stdcall __declspec (dllimport)
#endif /* Not BUILDING_DLL */

/*
class DLLIMPORT DllClass
{
  public:
    DllClass();
    virtual ~DllClass(void);

  private:

};*/
int DLLFUNCTION get64( void );

#endif
  [Linker error] undefined reference to `_imp___Z5get64v@0'
  ld returned 1 exit status
P-3218
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
P-3226
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?
P-3227
« 1 » 2 3
  Strona 1 z 3 Następna strona