Gå til innhold

Prøver å lære å lage .dll


Anbefalte innlegg

Jeg skjønner egentlig ingenting av hvordan man lager .dll's.

Har funnet ut at man skal begynne sånn:

#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_ */

 

men mer kan jeg egentlig ikke, jeg begynte med å lære dll's fordi at jegville lage winapi funksjoner til mitt media center jeg holder på å lage.

 

er det noen som kan forklare hvordan man fortsetter og kanskje vise noen eksempler.

jeg er bare 14 år, men fremdeles god i engelsk, jeg kan et annet programeringsspråk som heter gml som er ganske likt c++

så noen linker til gode guider ville også vært fint :)

Lenke til kommentar
Videoannonse
Annonse

det er bra ;)

jeg fant ikke ut noe mer om dll's idag, men lærte litt c++

#include <windows.h>

int WINAPI
WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR pszCmdLine, int iCmdShow)
{
MessageBox(NULL, "Hei :)!", "Kake_Fisk sier:", MB_OK | MB_ICONEXCLAMATION);
return 0;
}

jeg bruker Dev-C++ men greier ikke å kjøre det :\

det kommer bare opp et tomt vindu...

Lenke til kommentar

En DLL er egentlig bare en .exe fil som ikke har noen entry point.

 

For å eksportere C funksjoner fra en dll i MSVC++ så bruker du

__declspec(dllexport) i funksjonsdefinisjonen

 

f.eks.

 

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

extern(C)
{
 __declspec(dllexport) int MainDllFunction()
 {
MessageBox(NULL, "Hello World!", "Message", MB_OK);
 }
}

 

Du kan også bruke definisjonsfiler for å gjøre dette, men jeg synes det er greiere å bruke delcspec

Lenke til kommentar

Det spørs hva du skal gjøre.

 

Skal du linke dll-en statisk, on demand eller dynamisk?

Ved on demand eller statisk, så må du bare importere .lib filen som lages av compileren, og skrive en header fil for den (hvor funksjonene er definert med __declspec(dllimport) istedet for export)

Hvis du derimot skal linke den dynamisk, kan du se på LoadLibrary funksjonen på MSDN.

Lenke til kommentar

Er ikke helt sikker på om jeg skal bruke den demand eller dynamisk, men jeg skal bruke den til å winapi funksjoner.

 

Jeg bruker et program som heter game maker og der skal man putte dll-en i samme mappe som spillet.

Og fra der jeg lager spillet må jeg lage scripter som skal importa fra dll-en...

Lenke til kommentar

Ok

 

Da regner jeg med at gamemaker har dokumentasjon på hva slags funksjoner du må eksportere.

 

Ofte gjøres dette ved at man har en C funksjon som returnerer en peker til en klasse

 

f.eks.

 

class MyDescriptorClass
{
protected:
public:

int GetNumberOfExportedFunctions()
{
 return 1;
}
void** GetExportedFunctions()
{
return { HelloWorldProc };
}

char** GetExportedFunctionNames()
{
 return {"HelloWorldFunction"};
}

}*my_desc;

void HelloWorldProc()
{
 MessageBox(NULL, "Hello World!", "Hello", MB_OK);
}
__declspec(dllexport) GetDescriptor()
{
 return my_desc;
}
__declspec(dllexport) void DllMain(HINSTANCE hInstance ...?)
{
 my_desc = new MyDescriptorClass();
}
__declspec(dllexport) void UnloadMain(HINSTANCE hInstance ...?)
{
 delete my_desc;
}

 

Kan ikke garantere at koden min er riktig, eller at dette kompilerer engang.

Les dokumentasjonen til gamemaker SDK

Lenke til kommentar

Blir helloworldproc() en funksjon i game maker da?

 

Men dette sto i Game Maker Help:

In those cases were the functionality of GML is not enough for your wishes, you can actually extend the possibilities by using plug-ins. A plug-in comes in the form of a DLL file (a Dynamic Link Library). In such a DLL file you can define functions. Such functions can be programmed in any programming language that supports the creation of DLL's (e.g. Delphi, C, C++, etc.) You will though need to have some programming skill to do this. Plug-in functions must have a specific format. They can have between 0 and 16 arguments, each of which can either be a real number (double in C) or a null-terminated string. (For more than 4 arguments, only real arguments are supported at the moment.) They must return either a real or a null-terminated string.

 

men jeg tror jeg skal bruke demand ;)

 

og kan du forklare hva det gjør, den koden...

Lenke til kommentar
Hvis du vil bruke Win32 API, så går det fint, men da vet du sikkert også hvor mye jobb det er ;)

Using Menus

Menu functions

 

Vet egentlig ikke hvor mye job det er :dontgetit:

Men trenger ikke så serlig mye mer en menubar...

 

Men jeg skal teste ut de linkene ;)æ

 

Edit: post # 50

 

Enda en edit: Det så sånn passe vanskelig ut, men burde kanskje først lære C++ språket ;)

Endret av kake_fisk
Lenke til kommentar
  • 2 uker senere...

Jeg vil bare prøve å lage forskjelige dll-er egentlig.

Men jeg tror jeg vet hvordan man importerer den til game maker og sånt, fant en guide ;)

 

Men jeg vil egentlig bare vite hvordan jeg kan lage forskjellig dll-er fordi man kan jo ikke bruke helt vanlig c++ der.

jeg skal fortsatt ha export der?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...