headlogo

Erzeugen und Verwenden einer dll mit C++

Dieses Beispiel unter Visual Studio 2008 illustriert, wie man eine dll erzeugen und danach aufrufen kann

Es ist eine Analogie zu den JAR-Files in der JAVA-Welt und deren Wiederverwendung

DLL erzeugen

//unter VS2008:
//1. neues projekt -> visual c++ -> win32 projekt
//2. Assistent unter Anwendungseinstellungen
//						= dll
//						= leeres Projekt
//3. hinzufügen -> vorhandenes Element -> dllmain.cpp
#include <windows.h>

extern "C"
{
	//public-Methoden
	__declspec(dllexport) LPSTR testString(int i)
	{
		LPSTR zahl = new char[4];
		itoa (i,zahl,10); //2 = binarysystem 10 = dezimal 16 = hex

		LPSTR text = "nasebööge änni";

		LPSTR alles = new char[strlen(zahl) + strlen(text) + 1];
		strcpy(alles,text);
		strcat(alles,zahl);

		return alles;
	}
}

void startMessageBox(void)
{
  LPSTR msg = "das ist eine automatisch ausgelöste Meldung, wenn dll mit loadlibrary() geladen wird";
  MessageBoxA(0, msg, "Autostart", MB_OK | MB_ICONINFORMATION);
  return;
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lh3served
					 )
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)startMessageBox, NULL, 0, NULL);
		break;
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

DLL verwenden

//unter VS2008:
//1. neues projekt -> visual c++ -> win32 projekt
//2. Assistent unter Anwendungseinstellungen
//						= konsolenanwendung
//						= leeres Projekt
//3. hinzufügen -> vorhandenes Element ->	= dllCaller.cpp
//						= dllmaker.dll
//4. rechtsklick auf solution
//			-> eigenschaften 
//			-> konfigurationseigenschaften
//			-> allgemein -> zeichensatz
//			= Multi-Byte-Zeichensatz verwenden
#include <windows.h>
#include <stdio.h>

typedef LPSTR(*bProc)(int);

int main()
{
	HMODULE hLib=LoadLibrary("dllmaker.dll"); //mit autostart
	bProc DllFunktion=(bProc)GetProcAddress((HMODULE)hLib, "testString"); //schauen ob es die gibt

	LPSTR s = DllFunktion(66);

	printf (s);
	while (getchar()==0);
    return 0;
}