Seite 1 von 1

DLL öffnen und Funktion rufen

Verfasst: Fr Jun 01, 2012 10:33 pm
von Xin
Ich probiere gerade wieder ein wenig herum brauchte mal ein Beispiel, um eine DLL zu öffnen und ein Funktion daraus zu rufen.
Vielleicht kann es jemand für eine Software mit Plugins gebrauchen.
Ich rufe hier die Funktion MessageBoxA aus der user32.dll.

Das ganze sieht so aus:

Code: Alles auswählen

#include "stdafx.h"
#include <windows.h>

typedef int (WINAPI *msgBoxFunc)( void *, char const *, char const *, unsigned int );

int _tmain(int argc, _TCHAR* argv[])
{
  HMODULE lib;

  lib = LoadLibraryA( "User32.dll" );

  msgBoxFunc func;
  func = (msgBoxFunc) GetProcAddress( lib, "MessageBoxA" );

  func( NULL, "Text", "Title", 0 );
  
  FreeLibrary( lib );

  return 0;
}

Mein nächster Schritt ist den Funktionsaufruf func( NULL, "Text", "Title", 0 ) auf den Stack zu packen, nur halt nicht so.
Also ein übliches Xin-Problem. :-)
Das blöde ist eben, dass ich zur Laufzeit noch nicht weiß, wie die Funkion heißt und auch nicht, welche Parameter ich rufen muss.
Bin für Ideen offen, die besser sind als meine - meine gefällt mir nämlich nicht. ^^

Re: DLL öffnen und Funktion rufen

Verfasst: Sa Jun 02, 2012 5:47 am
von cloidnerux
Also, wenn du weder weist, wie die Funktionen heißen noch welche Parameter sie haben, dann ist das ziemlich schlecht.
Es gibt aber meiner Meinung nach Funktionen, die dir alle Funktionen in der *.DLL ausgeben und du kannst dann dir was aussuchen.
Ich habe für mein NetduinoListener es so gemacht, das ich einen Einstiegspunkt in der DLL vorgegebenen habe, über ein Interface und ich dann einfach mit den .NET mitteln nach eben einer solchen Funktion, bzw Interface gesucht habe.

Re: DLL öffnen und Funktion rufen

Verfasst: Sa Jun 02, 2012 10:42 am
von Xin
cloidnerux hat geschrieben:Also, wenn du weder weist, wie die Funktionen heißen noch welche Parameter sie haben, dann ist das ziemlich schlecht.
Es gibt aber meiner Meinung nach Funktionen, die dir alle Funktionen in der *.DLL ausgeben und du kannst dann dir was aussuchen.
Zur Laufzeit weiß ich das. Aber das Programm muss beliebige Funktionen rufen können, ohne beim Kompilieren bekannt ist, wie die Funktion heißt oder welche Parameter sie hat.
Das wird erst während der Laufzeit konfiguriert.
cloidnerux hat geschrieben:Ich habe für mein NetduinoListener es so gemacht, das ich einen Einstiegspunkt in der DLL vorgegebenen habe, über ein Interface und ich dann einfach mit den .NET mitteln nach eben einer solchen Funktion, bzw Interface gesucht habe.
Ich brauche das, was Du als ".NET Mittel" bezeichnest. :-)

Re: DLL öffnen und Funktion rufen

Verfasst: Do Jun 07, 2012 9:46 pm
von Xin
Gefunden habe ich die libffi, die u.a. in JavaJNA, Dalvik (Android), Python und Ruby zum Einsatz kommt.
Das Problem wird genauso angegangen, wie ich es auch lösen wollte.
Vorteil von libffi ist allerdings, dass es bereits für einige Prozessoren zur Verfügung steht, von denen ich keinen Plan habe.