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 …
- DLL zu Projekt hinzufügen (Projects -> Add to Projects -> Files …)
-
#include Headerdatei der dll
- lib-Datei einbinden (Project -> Settings -> Link - Object/library moduls)
Wie man zu dieser lib-Datei kommt: 10 Artikel zurück! 
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&: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… 
-
#include Headerdatei der dll
Und die hab ich nicht mal.
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