» »

[C++] kako narediti dll

[C++] kako narediti dll

prog_1337 ::

Lep pozdrav !

Prosil bi samo za en primer dll-ja, da se ven naučim kako to deluje. Če mi lahko kdo pove tole step by step.

Torej... v dev c++ izberem zgoraj new project > dll.. mi naredi dva fajla in noter že nekaj napiše. Zdaj pa me zanima kako naj tukaj noter vstavim podprogram, da bom ga lahko z glavnim programom klical. Pa kako naj iz glavnega programa kličem.

Samo en osnovni primer npr. funkcije:
void test()
{  
  cout <<"huhu"; 
}

Tole je koda, ki mi jo napiše ko naredim dll project:

dllmain.cpp
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>

DllClass::DllClass()
{

}


DllClass::~DllClass ()
{

}


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;
}


dll.h
#ifndef _DLL_H_
#define _DLL_H_

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


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

  private:

};


#endif /* _DLL_H_ */


Hvala.

Tutankhamun ::

Sej za en primer ti je že okolje dev c++ naredu. To je objekt DllClass. Ti ga lahk komot radiraš. Pa namest tega vpišeš recimo tvojo funkcijo. Pa ne pozabt pred funkcijo vpisat DLLIMPORT tko kot pr DllClass. Pa še kšn extern "C" tudi nebi škodoval :).

Kar se pa DllMain tiče, se pa ne obremenjevat. Zdej že neki časa nism delu z dllji v Winsih, zadne cajte samo v linuxu. Mislm pa da lahko to tudi zbrišeš pa se še zmer prevede. Probi nism pa prepričan.

Sej dll drgač ni prov nč komplicirana zadeva. Pač notr maš ene funkcije, ki jih lahko potem kličejo različni procesi.

Drgač pa sm najdu eno stran, ki ti bo v velko pomoč. Lih neki tazga kar ti rabš.
AMD Phenom QUAD 9950 Black Edition, 8GB

Mavrik ::

DllMain je samo handler za določene evente, ki jih tam vidiš naštete. Torej če moraš kaj porihtat, ko se DLL naloži/odstrani s procesa/threada potem tisto uporabiš, drugače ga ne rabiš.

Pomemben je samo tisti DLLIMPORT, ki pomeni to, da se naj tista funkcija iz DLLja exporta in postane dosegljiva zunaj DLLja. Potem pa je potrebno še samo dodati ustrezno stikalo prevajalniku, kar sklepam da Dev-C++ nared sam.
The truth is rarely pure and never simple.

prog_1337 ::

Zdaj sem po tistem linku spravil stvari skupaj da mi skompajla in deluje. Ampak mi deluje samo tista druga metoda Using the DLL (Without an Import Library) ... jaz pa bi rad uporabljal prvo metodo ki se mi zdi dosti lažja. Pa sem vse storil tako kot piše...dll fajle sem dal v isto datoteko...includal dll.h.
Zanima me zakaj mi napiše napako v iostream.h pa funkcije mi zgleda niti ne najde:
[Linker error] undefined reference to `test'


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python, prosim za pomoc pri programiranju (strani: 1 2 3 )

Oddelek: Programiranje
10414165 (10267) lenika
»

potrebujem pomoc pri programiranju z motorolo mc6803 mikrocipom

Oddelek: Programiranje
61566 (1375) iggy
»

Programiranje v zbirniku - potrebujem pomoč

Oddelek: Programiranje
51724 (1661) St@jler
»

Win32 API in statične knjižnice

Oddelek: Programiranje
71256 (1163) CCfly
»

C in Dll

Oddelek: Programiranje
71147 (1054) Senitel

Več podobnih tem