Structurübergabe an DLL
-
hallo,
ich habe folgendes Problem:
ich habe eine Funktion, in welcher ich eine switch case abfrage habe. Wenn ich auf a klicke, soll die Funktion, welche ich in eine DLL geschrieben habe aufgerufen werden. Soweit hat alles funktioniert, doch als ich versucht habe der Funktion eine Struktur zu übergeben, öffnete sich zwar die Console, allerdings auch ein Error FEnster, in welchem steht: "The procedure entry 'functionsname' could not be located in the dynamic link library 'dllName.dll'"
Mein Code sieht wie folgt aus:
case 97: SaFi(pS); break;
ps ist die Adresse eines Pointers, der in einer anderen Funktion bestimmt wurde und in diese Funktion übergeben wurde.
__declspec(dllexport) void SaFi(struct sU1 *pW)
so sieht die Funktion in der DLL aus, an welche ich die Structur übergeben möchte. Leider scheint da etwas schief zu laufen, kann mir jemand helfen?
printf("%d"pW->uiB);
funktioniert nicht!
-
Gast5 schrieb:
hallo
moin
Gast5 schrieb:
ich habe eine Funktion, in welcher ich eine switch case abfrage habe. Wenn ich auf a klicke, soll die Funktion, welche ich in eine DLL geschrieben habe aufgerufen werden.
Bis hier habe ich rein gar nichts verstanden,
Gast5 schrieb:
ein Error FEnster, in welchem steht: "The procedure entry 'functionsname' could not be located in the dynamic link library 'dllName.dll'"
Hört sich für mich stark danach an, dass du die DLL dynamisch lädst, richtig?
Haben wir eine C oder C++ DLL? Hast du ein C oder C++ Projekt? Hast du dir mal die exportierten Namen (z.B. mit Dependency Walker) angeschaut?
Zeig mal wie du die Routine lädst.
-
das hauptproblem ist einfach, wie kann ich der DLL sagen, dass sie eine Struktur, welche ich in einer HeaderDatei in meinem Main Projekt erstellt habe, erkennen soll?
-
Gast5 schrieb:
das hauptproblem ist einfach, wie kann ich der DLL sagen, dass sie eine Struktur, welche ich in einer HeaderDatei in meinem Main Projekt erstellt habe, erkennen soll?
gib ihr einfach die adresse der struct. exe und dlls teilen sich den adressraum, das klappt schon.
-
Gast5 schrieb:
das hauptproblem ist einfach, wie kann ich der DLL sagen, dass sie eine Struktur, welche ich in einer HeaderDatei in meinem Main Projekt erstellt habe, erkennen soll?
Wie ;fricky schon sagte reicht es aus die Adresse darauf an die DLL-Funktion zu übergeben.
Um die struct zu interpretieren muss innerhalb der DLL allerdings die struct als Typ bekannt sein oder du musst sie selber interpretieren.
-
ich denke der punkt ist dass die header datei sowohl in der dll als auch in dem aufrufenden programm includiert werden muß.somit weiß die dll wie die structur aussieht und dein programm weiß das auch. daher auch die trennung in .h und .c dateien.