DLL öffnen und Funktion rufen

Windowsspezifische Probleme, WinAPI, conio.h
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

DLL öffnen und Funktion rufen

Beitrag von Xin » Fr Jun 01, 2012 10:33 pm

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. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3084
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: DLL öffnen und Funktion rufen

Beitrag von cloidnerux » Sa Jun 02, 2012 5:47 am

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: DLL öffnen und Funktion rufen

Beitrag von Xin » Sa Jun 02, 2012 10:42 am

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. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8492
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: DLL öffnen und Funktion rufen

Beitrag von Xin » Do Jun 07, 2012 9:46 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten