2016-06-08 1 views
0
  • EXE 'A' ist in C# geschrieben. 'A' ruft die DLL 'B' auf, ebenfalls in C# geschrieben.
  • Die DLL 'B' ruft CreateProcess auf, um eine zweite EXE 'C' zu starten. 'C' ist in nativem C++, Win32 geschrieben.
  • C‘ muss in der Lage sein, eine Funktion in DLL ‚B‘ zu nennen, weil ‚B‘ kennt einen Griff, mit dem er Informationen von ‚A‘ erhalten. Das Handle wird als globale Variable innerhalb B gespeichert.

Ich weiß, wie Sie eine verwaltete C# -DLL von einer systemeigenen C++ - EXE aufrufen.Kann ein EXE-Aufruf in die DLL, die es gestartet hat?

Meine Frage ist: Wie können wir C Rückruf in B machen? Wie findet C finden B?

+3

Ich würde eine Named Pipe verwenden, geben Sie einen GUID-Namen und übergeben Sie den Namen als Befehlszeilenargument C –

+0

'C' muss eine ausführbare Datei sein, weil es eine Anwendung ist, die bereits geschrieben wurde, viele KLOCs Code. Es ist eine interaktive Grafik-App, die eng an die Windows-Nachrichtenschleife gebunden ist. Es würde viele Monate dauern, bis sie zu einer DLL wird. Es ist machbar, aber ich möchte Zeit sparen. – Pierre

+0

Warum in aller Welt würde dies abgelehnt werden? Würde jemand, der eine Absage macht, bitte die Höflichkeit haben, zu erklären, warum er sich dazu entschieden hat? Der Vorschlag von Scott Chamberlain, Named Pipes zu verwenden, ist hervorragend und könnte mir die Lösung liefern, nach der ich suche. – Pierre

Antwort

-2

einfache Antwort: Ja, Sie können. Aber es ist ein wirklich nerviger Prozess. Sie müssen einen Rückruf in B erstellen und C muss diesen Rückruf erhalten.

Also hier ein paar Links, die Ihnen beim Laden der unmanaged DLL helfen.

http://timtrott.co.uk/calling-win32-dlls/
Is it possible to use win32 DLLs in C#?
https://msdn.microsoft.com/en-us/library/aa719104%28v=vs.71%29.aspx

Und hier ist, wie Sie Ihren Rückruf erstellen:
Howto implement callback interface from unmanaged DLL to .net app?

Mein Rat ist, vermeiden Sie dies zu tun. unmanaged dlls sollten nur im Modus "request and return" verwendet werden, was bedeutet, dass sie nur Anfragen des Anrufers beantworten und der Anrufer wartet, bis die dll den Prozess beendet.

+0

Dies behandelt nicht das Kernproblem: Wie die IPC zu implementieren. – IInspectable

+0

OP's dll ist nicht "unmanaged" verwaltet – MickyD

2

Nein, kann es nicht.

Die DLL und EXE sind in verschiedenen Prozessen, und Sie können eine Funktion nicht in einem anderen Prozess aufrufen.

+0

Wie wäre es mit einer Pfeife wie von Scott Chamberlain vorgeschlagen? Würde das das Problem vermeiden, in einem anderen Prozess zu sein? – Pierre

+2

Es hängt davon ab, was Sie mit "vermeiden" meinen. Benannte Pipes funktionieren natürlich über Prozesse hinweg. Aber sie erlauben es nicht, eine Funktion in dem anderen Prozess aufzurufen, sie lassen Sie nur Bytes herumreichen. Vermutlich ist das alles, was Sie wirklich brauchen. –

Verwandte Themen