AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ComObject

Ein Thema von ZeraKakkade · begonnen am 3. Jun 2011 · letzter Beitrag vom 9. Jul 2011
Antwort Antwort
ZeraKakkade

Registriert seit: 3. Jun 2011
1 Beiträge
 
#1

ComObject

  Alt 3. Jun 2011, 13:17
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?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

AW: ComObject

  Alt 3. Jun 2011, 19:52
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

AW: ComObject

  Alt 9. Jul 2011, 07:00
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
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  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 13:42 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