Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Sprachen (https://www.delphipraxis.net/82-net-sprachen/)
-   -   C# ComObject (https://www.delphipraxis.net/160836-comobject.html)

ZeraKakkade 3. Jun 2011 12:17

ComObject
 
Hallo

Ich versuche seit zwei Tagen eine C# Datei in Delphi 7 einzubauen doch scheitere kläglich.
Momentan versuche ich es über ComObject zu machen.

hier ist mein Test Code in C#

Delphi-Quellcode:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;


namespace testfordelphi
{
    [ComVisible(true)]

    [Guid("454F8365-58CA-4583-9991-5EF798997B73")]
    public interface IADDIF
    {
        void ShowHello();
        int Add(int i1, int i2);
    }



    [ClassInterface(ClassInterfaceType.None)]
    [Guid("60E14408-876F-4017-AF09-0131D8C82F5A")]
    public class Class1 : IADDIF
    {
        public int Add(int i1, int i2)
        {
            return i1 + i2;
        }

        public void ShowHello()
        {
            MessageBox.Show("Huhu");
        }
    }
}
Habe als Post Buildereignis
csc /t:library /out:sqlmanager.dll
ragasm sqlmanager.dll /tlb:sqlmanager.tlb

Wenn ich nun in Delphi die Typbibliothek importiere und die Klasse einbinde mit

Delphi-Quellcode:
procedure testsql();
  var intfRef: IADDIF;
  begin
    intfRef := CreateComObject(IID_IADDIF) as IADDIF;
    intfRef.ShowHello;
  end;
fliegt der in der Zeile
intfRef := CreateComObject(IID_IADDIF) as IADDIF;
raus und meint: EOleSysError Klasse nicht registriert.

nun ist mir aufgefallen, das in c# beim erstellen folgende warnung ist:
Warnung 2 "...bin\Debug\testfordelphi.dll" enthält keine Typen, die für COM-Interop registriert werden können. testfordelphi


Was kann ich machen damit ich die Funktionen in Delphi aufrufen kann?
Was mache ich falsch?

Dezipaitor 3. Jun 2011 18:52

AW: ComObject
 
Du musst deine C# Klasse über einen Out-Of-Process Server installieren und nicht über eine DLL, da Delphi Win32 kein DLL mit .NET laden kann. Du kannst es mit Delphi Prism versuchen, da solltest du C# Assemblys direkt einbinden können. Andernfalls kannst du nur ein C# COM Server registrieren, starten und benutzen. Zudem musst du explizit in C# eine 32Bit Assembly erstellen.

Elvis 9. Jul 2011 06:00

AW: ComObject
 
Wenn du dein Interface auskommentierst und ClassInterfaceType.None an der Klasse stehen hast, gibt es für regasm tatsächlich nix zu registrieren.

Wenn du deine C# Assembly ohne COM in Delphi nutzen willst gibt es auch dafür eine Lösung: Mein Unmanaged Exports template


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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