Sample - DDLs in C++: Explicit Dynamic Linking with DEF-File Notes Code
Simple DLL that Prints a Text:
#include "iostream.h" //cout BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } void WriteString() { cout << "This string printed from DLL ..." << endl; };
DEF-file for DLL:
LIBRARY "DLL.DLL" EXPORTS WriteString @1
Calling Program in Console Application:
#include <windows.h> //for HINSTANCE #include "iostream.h" //for cout void main() { typedef void (* PFUNCTION)(void); PFUNCTION pFunction; HINSTANCE hLibrary = LoadLibrary("dll.dll"); // Load the DLL now if (hLibrary != NULL) { /*********************************************************************** * This code is no differerent from snippet not using DEF-file, but * * importantly GetProcAddress uses original function name. * ***********************************************************************/ pFunction = (PFUNCTION)GetProcAddress(hLibrary, "WriteString"); /*********************************************************************** * Oprionally, when DEF-file is used for explicit dynamic linking, we * * could use function ordinal number from DEF-file to call the function.* ***********************************************************************/ //pFunction = (PFUNCTION)GetProcAddress(hLibrary, MAKEINTRESOURCE(1)); if(pFunction==NULL) { cout << "Function entry point not found ..." << endl; } else { (*pFunction)(); }; FreeLibrary(hLibrary); } else { cout << "Library not found ..." << endl; }; }
Console Output:
This string printed from DLL ...
2002, Netston Consulting