Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: DLL

C++Amatööri [14.09.2005 18:52:08]

#

miten DLL:liä ohjelmoidaan

Juice [14.09.2005 20:22:46]

#

Tässäpä lähes kommentoimaton, mutta selkeä esimerkki:

/* Replace "dll.h" with the name of your header */
#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 */

#endif

using namespace std;

#include <windows.h>

//määritellään funktio
extern "C" void MsgBox(char*);

extern "C" void DLLIMPORT MsgBox (char *str)
{
    MessageBox (0, str,"Hello", MB_ICONINFORMATION);
}


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

Lisäksi kääntäjä taitaa vaatia parametrin -DBUILDING_DLL=1.

rutkis [15.09.2005 16:20:10]

#

Tapoja tehdä dll on useampia.

Esim ylläoleva jolla voi tarjota funktioita ulos dll:stä.

COM:lla tehdyissä dll:ssä tarjotaan ulos luokan rajapinta. siinä on huomattavasti enemmän koodia kuin ylläolevassa tavassa ja siitä suosittelenkin vilkaisemaan www.codeproject.com:n COM/DCOM-osiota.

COM:lla toteutettua dll:ää voi itseasiassa kutsua myös verkon yli ja com hoitaa siitä välistä tarvittavat jutut. Default COM dll pitää olla rekisteröitynä windowsin rekisteriin, mutta niitä voi myös käyttää ilman rekisteriä, mutta silloi ne ladataan käsin erilailla kuin normaalisti. Lisäksi käsin ladattava com-dll vaatii hieman muutoksia default-versioon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta