Funktion aus DLL aufrufen
-
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Guten Abend,
wo Ihr grade bei den DLL's seid:
Gestern habe ich es geschafft Programmteile in eine DLL auszulagern. Ich kann also Funktionen aufrufen, die in der DLL definiert sind. (Sogar mit Parameterübergabe und returnvalue)Nun die Frage:
1. Ich müsste irgendwie Variablen in der DLL und in der eigentlichen main-Funktion gleichzeigignutzen.2. Wenn es überhaupt möglich ist, möchte ich, dass meine DLL-Funktion eine andere Funktion im Programm triggert.
Schönen Abend weiterhin,
Heinz S.
-
für erstens gibt es irgendwas mit sharedmemory oder sowas ( musst mal bei msdn oder im Petzold suchen )
-
Heinz S. schrieb:
1. Ich müsste irgendwie Variablen in der DLL und in der eigentlichen main-Funktion gleichzeigignutzen.
Jo, das geht mit (für MS-Compiler, bei anderen Compiler müsstest Du nach den Befehlen gucken):
#pragma data_seg ("Shared") /* ...HIER VARIABLEN DEFININIEREN... */ #pragma data_seg () #pragma comment (linker, "/section:Shared,RWS")Heinz S. schrieb:
2. Wenn es überhaupt möglich ist, möchte ich, dass meine DLL-Funktion eine andere Funktion im Programm triggert.
Ähm, ein Programm X lädt eine DLL Y. Die DLL (Y) wird dann in den Adressraum des Programm (X) eingeblendet. Verstehe zwar nicht, was Dein Vorhaben bringen soll, aber dann muss in der DLL die Funktionsadresse bekannt sein. Das geht, Du kannst diese beim Aufruf einer Funktion ja übermitteln (als Beispiel).
-
Hallo,
danke ersteinmal für die schnelle Antworten. Ich benutze einen anderen Compiler (Ni CVI). Der kennt das nicht, aber ich werde mal weitersuchen...
Warum ist das bei jedem Compiler anders? ist DLL nicht = DLL?
Was nutz ihr für Compiler? Welche würdet ihr empfehlen bzw. welche sind die bekanntesten?zur zweiten frage: Nehmen wir an das Programm X ruft die Funktion "Dividieren" mit den Parametern z1=5 und z2=0 auf. Die Funktion "Dividieren" in der DLL müsste durch Null dividieren. Das Hauptprogramm soll aber die Fehlermeldung ausgeben wenn die DLLFunktion die Funktion "err()" aufruft.
-
CodeFinder schrieb:
Heinz S. schrieb:
1. Ich müsste irgendwie Variablen in der DLL und in der eigentlichen main-Funktion gleichzeigignutzen.
Jo, das geht mit (für MS-Compiler, bei anderen Compiler müsstest Du nach den Befehlen gucken):
#pragma data_seg ("Shared") /* ...HIER VARIABLEN DEFININIEREN... */ #pragma data_seg () #pragma comment (linker, "/section:Shared,RWS")lol, das bewirkt, daß die Variable in einem Shard Bereich im Speicher liegt und von mehreren Prozessen, welche die DLL einblenden, gesehen werden kann.
-
[quote="lol@finder"][quote="CodeFinder"]
Heinz S. schrieb:
#pragma data_seg ("Shared") /* ...HIER VARIABLEN DEFININIEREN... */ #pragma data_seg () #pragma comment (linker, "/section:Shared,RWS")wo baue ich das ein? inne DLL oder Programm?
-
1. Ich müsste irgendwie Variablen in der DLL und in der eigentlichen main-Funktion gleichzeigignutzen.
Dann pack die Variablen in die DLL und exportier die auch. Obwohl es normal nie nötig sein sollte Variablen zu exportieren - deutet fast immer auf unsauberes Design hin.
2. Wenn es überhaupt möglich ist, möchte ich, dass meine DLL-Funktion eine andere Funktion im Programm triggert.
Das machst du am besten über Callbacks. (Übergib einen Zeiger auf die Funktion in der EXE an die DLL, also als Parameter einer Funktion die in der DLL implementiert ist. Über den Zeiger rufst du die Funktion dann auf.)
-
lol@finder schrieb:
[...]
lol, das bewirkt, daß die Variable in einem Shard Bereich im Speicher liegt und von mehreren Prozessen, welche die DLL einblenden, gesehen werden kann.Hatte ihn so verstanden, dass er genau das wollte... .