AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Prism Externe Anwendung auf das eigene Programm legen?
Thema durchsuchen
Ansicht
Themen-Optionen

Externe Anwendung auf das eigene Programm legen?

Ein Thema von Alexander · begonnen am 11. Sep 2007 · letzter Beitrag vom 13. Sep 2007
Antwort Antwort
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#1

Externe Anwendung auf das eigene Programm legen?

  Alt 11. Sep 2007, 20:30
Hallo ,
ich habe mit C# (.NET 2.0) eine Komponente geschrieben. Diese möchte ich auch gerne in einer Delphi.NET Anwendung verwenden (.NET 1.1). Aufgrund der unterschiedlichen .NET Version klappt das ja nicht.

Meine Idee war jetzt folgende:
Ich bastel nen kleines Programm um die Komponente (mit C#) und starte das Programm in meiner Delphi.NET Anwendung (.NET 1.1).
Dann habe ich mir überlegt, könnte ich ja einfach mit der Win32API Funktion SetParent die Handles umbiegen und so die Anwendung in die Delphi-Anwendung bekommen. Dazu erstelle ich mir eine Form, auf die dann die Anwendung angezeigt werden soll.

Gesagt getan:
Testweise starte ich erstmal den Taschenrechner.
Delphi-Quellcode:
   TProcessHelper = class
  private
    [DllImport('"user32.dll')]
    class function SetParent(hWndChild : IntPtr; hWndNewParent : IntPtr) : IntPtr; static;
  {...}
procedure loadProcess();
var
   p : Process;
   frm : Form;
begin
  frm := Form.Create();
  frm.Owner := _parent;
  frm.ShowInTaskbar := false;

  p := Process.Create();
  p.StartInfo.FileName := 'calc.exe';
  include(p.Exited, p_Exited); // nur damit das Form auch wieder geschlossen werden kann.
  p.Start();

  SetParent(p.MainWindowHandle, frm.Handle);
  frm.ShowDialog();
end;
Leider kommt sobald ich mit der Maus auf den Taschenrechner oder meine Anwendung klicke die Fehlermeldung:
Zitat:
"Die DLL user32.dll kann nicht geladen werden."
Woran kann das liegen ?
Vielleicht fällt euch ja auch noch eine etwas elegantere Möglichkeit ein, die Anwendung in das Delphi-Programm zu integrieren?

Besten Dank,
Alexander
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Externe Anwendung auf das eigene Programm legen?

  Alt 11. Sep 2007, 20:44
Ist das zusätzliche Anführungszeichen im Attribut beim Kopieren reingerutscht? Ich hoffe nicht, denn einen anderen Fehler kann ich nicht erkennen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: Externe Anwendung auf das eigene Programm legen?

  Alt 12. Sep 2007, 14:41
Oha, das wirklich ein Fehler . Leider klappt es aber nicht so, wie ich mir das gedacht habe.
Bzw. es ist Zufall, ob es klappt oder nicht. Mal klappt es, dann wieder nicht.

Ich habe mir da jetzt noch etwas anderes überlegt.
Ich lasse die Anwendung einfach modal anzeigen, indem ich den Prozess in einem nicht sichtbaren, aber modal geladenen Form starte.
Das klappt recht gut. Auch wenn der Lösungsweg schon recht schräg ist . Aber so weit ich weiß, gibt es keine Möglichkeit diese Prozesse modal anzuzeigen (also wie bei ShowDialog einer Form).

Wenn du noch eine Idee hast, woran es liegen kann. Dann nur her damit
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Externe Anwendung auf das eigene Programm legen?

  Alt 12. Sep 2007, 18:28
Was passiert denn, wenn es mal "nicht klappt"? Ist dein code vielleicht einfach zu schnell und das Fenster noch nicht erstellt?

Achja, nur so am Rande: welcher böse Mensch zwingt dich zu 1.1 ?
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#5

Re: Externe Anwendung auf das eigene Programm legen?

  Alt 13. Sep 2007, 10:29
Zitat von Khabarakh:
Was passiert denn, wenn es mal "nicht klappt"? Ist dein code vielleicht einfach zu schnell und das Fenster noch nicht erstellt?
Der gestartete Prozess will einfach nicht in meine Anwendung rein . Sprich, das erzeugte Fenster bleibt so, wie es ist.
Mehr weiß ich leider auch nicht. Es kann gut sein, dass es ein Problem mit der Schnelligkeit ist. Das kann ich leider aber nicht nachvollziehen.

Zitat:
Achja, nur so am Rande: welcher böse Mensch zwingt dich zu 1.1 ?
. Ja, .Net 2 ist schon wesentlich angenehmer, daher habe ich auch das eine (Teil-)Projekt mit C# in 2.0 geschrieben und wollte es so einbinden. Das eigentliche Problem ist aber, dass ich mein Projekt in Delphi (1.1) begonnen habe und es zu viel Arbeit wäre, alles wieder umzuschreiben (~50 000 Zeilen). Alles was ich neu geschrieben habe und irgendwie vom eigentlich Projekt trennen kann, schreibe ich auch nicht mehr in .NET 1.1.
Chrome wäre sicherlich eine Alternative, habe es aber derzeit nur in einer Studentenversion .
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Externe Anwendung auf das eigene Programm legen?

  Alt 13. Sep 2007, 13:14
Zitat von Alexander:
Das kann ich leider aber nicht nachvollziehen.
Versuch es doch einfach einmal mit einem Thread.Sleep(5000) zwischen Start und SetParent.

Zitat:
(~50 000 Zeilen)
Ok, das ist ein Grund . Eigentlich müsstest du ja nur die äußerste GUI (und alle weiteren Teile, die du mit C# aufstocken willst) nach 2.0 konvertieren (C#-to-D.Net gibt es ja sogar von Borland/CG, einen kostenlosen Konverter in die andere Richtung habe ich leider nocht nicht gesehen ), aber bei 50000 LOC dürfte das trotzdem ein wenig Arbeit sein. Du musst eben erwägen, welcher Weg der längere und steinigere sein wird .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz