Avatar billede driis Nybegynder
09. december 2002 - 18:32 Der er 7 kommentarer og
1 løsning

At skrive en DLL ...

Hvordan skriver jeg en DLL, som jeg kan tilgå fra Visual Basic ?
Avatar billede arne_v Ekspert
09. december 2002 - 18:43 #1
Der plejer ikke at være problemer med at bruge DLL'er fra
Visual Basic.

Hvis du har Visual C++, så bruger du bare wizarden
til at lave skelettet af C++ koden.
Avatar billede slepee Nybegynder
09. december 2002 - 19:04 #2
Du kan sagtens skrive en DLL i VC++ og bruge den i VB eller omvendt, men du skal bare bruge en normal fremgangsmåde... skriv de funktioner du skal bruge, og så kan du senere bekymre dig om at 'eksportere' dem.

Men du kan ihvertfald lave en .DEF fil og inkludere i dit project. Den skal indeholde en EXPORTS sektion og funktionsnavnene, og så skal du sørge for at linkeren ved at du vil gøre funktionerne tilgængelige efter kompilering.

Man kan også prefixe functionerne, men jeg kan ikke huske det reserverede ord, og det kan være forskelligt fra kompiler til kompiler! :)

Håber jeg ikke skriver for kryptisk ... jeg kan ikke gøre det anderledes! :(
Avatar billede driis Nybegynder
09. december 2002 - 19:37 #3
Hvis jeg f.eks. bruger Visual C++ wizard til at lave et skelet, kommer det til at se nogenlunde sådan her ud:

#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved
                    )
{
    return TRUE;
}

Kan jeg så bare skrive mine funktioner, f.eks.
bool enFunktion(long v)
{
  //Udfør en masse
}

Og så deklarere dem i mit VB program ligesom når jeg bruger Windows API funktioner ? :
Private Declare Function enFunktion Lib "minDLL.dll" (v as Long) as Boolean
Avatar billede arne_v Ekspert
09. december 2002 - 20:59 #4
Ja.

Du skal dog nok lige erklære den som:

__declspec(dllexport) bool WINAPI enFunktion(long v)
Avatar billede slepee Nybegynder
10. december 2002 - 17:29 #5
hm... du skal nok passe... men jeg vil foreslå at du i stedet for at skrive hele linien dér skriver et #define statement (eller noget) i stil med:

#define ExportFn __declspec(dllexport)

så du kun skal skrive ExportFn foran functionerne:

#define 12CM 12
#define FUCK_DIG FALSE
#define ExportFn __declspec(dllexport)

BOOL ExportFn StorLille( long MitLem )
{
    if(MitLem > 12CM)
      return FUCK_DIG;
}

Jeg ved ikke om DllMain er obligatorisk, men jeg tror det altså!
Koden driis har givet dig burde virke... ihvertfald hvis du har 'stdafx.h' ellers kan du prøve at erstatte navnet med 'windows.h', så burde det virke! :)
BTW det her er alt sammen noget jeg siger uden at have skyggen af en compiler i nærheden, så jeg garanterer ikke for noget, men det er altså det min trange erfaring siger mig!
Avatar billede slepee Nybegynder
11. december 2002 - 20:07 #6
Forresten skal du nok lige tilføje: extern "C". For ellers kommer funktionen til at hedde et eller andet i stil med "?StorLille@@AXT??" eller noget!
Avatar billede arne_v Ekspert
11. december 2002 - 20:12 #7
Det mener jeg at min WINAPI sørger for.
Avatar billede driis Nybegynder
12. december 2002 - 16:05 #8
Tak skal i have.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester