Hur gör jag för att ladda en dll fil ?
hur ladda dll?
7 svar · 374 visningar · startad av puhbjörn
När jag försöker kompilera så kan den inte hitta dll filen, jag har lagt den i mappen med källkoden, release och debug men det funkar inte så var ska jag lägga den?
så var ska jag lägga den
Nånstans i pathen borde funka bra. I \system32, tex. Fast en annan fråga: Är det en Windows-dll eller en ActiveX-dll du försöker länka? #import förutsätter nog att filen har ett inbyggt typelib (ActiveX-dll).
det är en win dll som jag gör själv. Hur gör jag en activex dll då?
detta är felmeddelandet som jag får:
fatal error C1083: Cannot open type library file: 'game.dll': Ett fel inträffade när ett typbibliotek eller en DLL-fil skulle läsas.
Det finns två sätt att länka in en Windows-dll: explicit och implicit länkning.
Explicit länkning:
typedef void (*LPDINFUNKTION)(void);
LPDINFUNKTION Dinfunktion;
HINSTANCE hDll;
hDll = LoadLibrary("<eventuell sökväg>\dindll.dll");
if (hDll) {
//Dll:en är laddad. Hämta ut funktionen.
Dinfunktion = (LPDINFUNKTION)GetProcAddress(hDll,"Dinfunktion");
//Anropa funktionen om den hittades.
if(Dinfunktion)
Dinfunktion();
else
//Funktionen gick inte att ladda.
//Ladda ur dll:en om du inte behöver den mer.
FreeLibrary(hDll);
}
else
//dll:en gick inte att ladda.
.. om det finns en void-funktion Dinfunktion utan inparametrar i dll:en som du vill komma åt. Du måste alltså ändra
definitionen av LPDINFUNKTION så att det stämmer med hur din funktion ser ut. (Sen beror det lite på hur du definierat dina
funktioner i dll:en. Om du tex använder __stdcall utan def-fil så kan det bli problem.)
Eftersom du själv gjort dll:en så kan du också använda explicit länkning, dvs du tar med dll:ens header- och lib-fil när du
kompilerar och deklarerar funktionerna du vill importera som __declspec(dllimport) (svårare att visa med exempel).
Hur gör jag en activex dll då?
Det beror på miljön/kompilatorn du använder. Det brukar finnas en projekttyp som heter COM- eller ActiveX-Dll.
Det beror på miljön/kompilatorn du använder. Det brukar finnas en projekttyp som heter COM- eller ActiveX-Dll.
Jag använder Visual C++ 6.0.