[VC++] Formular in Dll aufrufen

06/11/2009 19:03 ms​#1
Hi,

ich habe vor kurzem ein wenig mit C++ angefangen. Nun bin ich auf ein Problem gestoßen, bei dem mir auch Google nicht weiterhilft (wahrscheinlich benutze ich einfach nur die falschen Suchbegriffe).
Ich will eine Dll in einen anderen Prozess injecten und diese dann ein Formular öffnen lassen. In Delphi habe ich das mit folgendem Code hinbekommen:

Code:
begin
  if appHandle = 0 then apphandle := GetActiveWindow;
  Application.Handle := appHandle;
  try
    Form1 := TForm1.Create(Application);
    with Form1 Do
      try
        ShowModal
      finally
        Free;
      end
  except
    On E: Exception Do Application.HandleException(E);
  end;
  Application.Handle := 0;
end;
Habe den Code zwar nur Copy&Pastet, aber es funktionierte wunderbar wenn ich die Funktion in einem neuen Thread ausgeführt habe.

Weiß jemand, wie ich das in VC++ hinbekomme?
06/11/2009 19:57 RDTSC#2
Du erstellst mit [Only registered and activated users can see links. Click Here To Register...] einfach ein Fenster, so, wie sonst auch.
06/11/2009 21:16 ms​#3
Naja, sonst bin ich es normalerweise gewohnt, die Objects bequem in mein Formular zu ziehen. Und so müsste ich ja alle Objekte in meinen Code schreiben, was ich ehrlich gesagt möglichst umgehen will, oder?
In Delphi ging das Coden einer DLL mit Formular außerdem genauso wie bei einer gewöhnlichen Applikation, ich musste nur den oben genannten Code einfügen.

Gibt es in VC++ keine Möglichkeit, das auch so zu machen?
06/11/2009 21:29 Adroxxx#4
BTW. über was machst du deine Formularfelder? MFC? CLR ? WinAPI? ^^
06/11/2009 21:41 ms​#5
Normalerweise gehe ich bei Neues Projekt immer auf CLR -> Windows Forms-Anwendung, also nehme ich mal an dass es CLR ist. :o

Ich habe es schon geschafft, andere DLLs ohne Form zu machen (da bin ich auf Win32 -> Win32-Projekt gegangen). Doch wenn ich dann ein Formular hinzufüge (Projekt -> Neues Element hinzufügen -> UI -> Windows-Form) und die Header-Datei anschließend include will er nicht kompilieren.
06/11/2009 22:53 RDTSC#6
CLR ist .NET, das weißt du, oder? :P

Geh auf Win32, erstelle eine Dll, füge ein Ressourcenskript hinzu, implementiere einen Dialog mit einer Callback-Funktion, die die Nachrichten verarbeitet, und verwende das CreateDialog-Makro, um dein Fenster zu erstellen.
06/11/2009 23:08 schlurmann#7
Die VCL kannst du auch in C++ verwenden. Alles wie in Borland Delphi.

Borland C++ Builder bzw. neuerdings heißt es Codegear RAD Studio.
06/12/2009 19:56 ms​#8
Quote:
Originally Posted by RDTSC View Post
CLR ist .NET, das weißt du, oder? :P

Geh auf Win32, erstelle eine Dll, füge ein Ressourcenskript hinzu, implementiere einen Dialog mit einer Callback-Funktion, die die Nachrichten verarbeitet, und verwende das CreateDialog-Makro, um dein Fenster zu erstellen.
Kannst du bitte ein wenig Beispielcode posten? Mir ist ehrlich gesagt nicht ganz klar geworden, was ich machen soll. :o


Edit: Naja, ist jetzt auch egal. Ich mach die GUI dann in ein eigenes Programm und lass dieses dann per Sockets mit meiner DLL kommunizieren.
06/13/2009 17:39 RDTSC#9
Bin gerade eben nach Hause gekommen und habe vor ein paar Minuten einen Beispielcode geschrieben (s. Anhang)

Es ist ein neues Projekt, wo einfach nur der Code, ein Ressourcenskript und Standard-Dialog drinnen ist.
06/14/2009 10:00 edman3#10
I bet this thread is very interesting...too bad that it's only for those who speak deutsch.:confused: