Einzelnen Beitrag anzeigen

Razor03

Registriert seit: 1. Jul 2005
10 Beiträge
 
#1

VCL Form in DLL in C# aufrufen

  Alt 15. Mai 2014, 14:36
Ich möchte eine existierende Delphi Form in eine Delphi DLL packen und diese Form in C# aufrufen.
Eigentlich habe ich sowas schon früher mit einer anderen Programmiersprache problemlos gemacht..allerdings habe ich den alten Quellcode nicht mehr und die Ziel-Programmiersprache ist eine andere.
Die c# Applikation soll dann später über ICS (welche Form dann auch immer) mit der Delphi DLL kommunizieren.

Ich weiß dass es Möglichkeiten wie Hydra oder Crosstalk gibt. Allerdings möchte ich es erstmal ohne diese kostenpflichtigen Tools probieren.

Ich kann in C# Funktionen aus der Delphi DLL aufrufen und bekomme auch Rückgabewerte, aber sobald ich eine Form in der DLL erstelle bekomme ich eine Exception in C#. Der Fehler passiert schon beim Create der Form (hab ich soweit debuggt).

Ich habe schon versucht die Form mit Create(nil) zu erstellen, allerdings mit selbigem Ergebnis.

Ich hoffe ihr könnt mir weiterhelfen

Delphi-Quellcode:
library Project8;

 

uses
  SysUtils,
  Classes,
  Windows,
  Forms,
  Unit9 in 'Unit9.pas{Form9};

{$R *.res}


procedure TestWindowAnzeigen(aHandle: HWND); stdcall;
begin
  Form9 := TForm9.CreateParented(aHandle);
  Form9.ShowModal;
end;
 
 exports TestWindowAnzeigen;

begin
end.
c# Code

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{




        public partial class Form1 : Form
    {

            [DllImport("Project8.dll", CallingConvention = CallingConvention.StdCall)]
            public static extern void TestWindowAnzeigen(IntPtr aHandle);
            //public static extern void TestWindowAnzeigen();


        public Form1()
        {
            InitializeComponent();


           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            TestWindowAnzeigen(Form1.ActiveForm.Handle);
        }
    }
}
  Mit Zitat antworten Zitat