Funktionsargumente für DLL-Funktion

Hallo schon wieder,

erstmal der Code, der mich hier zum Verzweifeln bringt:

typedef int (WINAPI\*cfunc)();

...

int ret, arg;

// DLL laden
HINSTANCE meinedll = LoadLibrary("meinedll.DLL");
if(meinedll == NULL)
 // Fehlerbehandlung

// Funktion "int func1(int\* arg)"laden 
cfunc func1 = (cfunc)GetProcAddress((HMODULE)meinedll, "\_func1@4");
if(func1 == NULL)
 // Fehlerbehandlung

ret = func1(&arg); // KNACKPUNKT
if(ret)
 // Fehlerbehandlung
cout 

So, das Problem ist der Funktionsaufruf. Ich erhalte zwar einen "korrekten" (selbstdefinierten) Rückgabewert, wenn ich die Funktion ohne Argumente aufrufe, aber das ist natürlich Quatsch.
So wies da steht (und gehen sollte), erhalte ich stets die Compilermeldung
"error: too many arguments to function"

Wie kann das sein, wenn die Funktion doch unbedingt ein Argument braucht?
Und wie kann ich das beheben?

Danke im Voraus,

kvida

Hallo,

bei Deinem Code sehe ich nicht durch. Aber falls Du mit Visual C++ oder Visual eC++ arbeitest, könnte ich Dir evtl. weiterhelfen …

  1. DLL zu Projekt hinzufügen (Projects -> Add to Projects -> Files …)
  2. #include Headerdatei der dll
  3. lib-Datei einbinden (Project -> Settings -> Link - Object/library moduls)

Wie man zu dieser lib-Datei kommt: 10 Artikel zurück! :wink:

Gruss,
Beanpole

Hallo,

ich bin nicht gerade C-Spezialist, aber ich denke, mit

typedef int (WINAPI*cfunc)();

definierst du eine Funktion cfunc ohne Parameter (wegen „()“). Klar meckert dann der Compiler.

Gruss Reinhard

Hallo!

Die definition vom Funktionszeiger ist falsch.

besser ginge:
typedef int (WINAPI*cfunc)(int*);

Ich benutze:

bool (PASCAL *pFnCheckClassLibVersion)(CString version);
(FARPROC&amp:wink: pFnCheckClassLibVersion=GetProcAddress(hinstContainer,"?CheckClassLibVersion@CGridObjectContainerApp@@QAE_NV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@@Z");

gruß Pauli!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Beanpole!

bei Deinem Code sehe ich nicht durch. Aber falls Du mit Visual
C++ oder Visual eC++ arbeitest, könnte ich Dir evtl.
weiterhelfen …

Möööp! Genau das will ich ja vermeiden… :wink:

  1. #include Headerdatei der dll

Und die hab ich nicht mal. :wink: Ich hab nur die DLL, LIB und DEF…

kvida

Danke schön! (Aber…)
Hallo Paulus!

Die definition vom Funktionszeiger ist falsch.

besser ginge:
typedef int (WINAPI*cfunc)(int*);

Toll, das ist genau das, was ich gesucht hab! Danke schön!

Aber hey… heisst das, ich muss jetzt für jede Funktion mit unterschiedlicher Signatur nen eigenen Funktionspointer anlegen? o_O

Ich glaub, da pack ich das doch nochmal in ne eigene Datei… -_-"

kvida