Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   Delphi DLL Schnittstelle zu C# (https://www.delphipraxis.net/181105-delphi-dll-schnittstelle-zu-c.html)

TTF 16. Jul 2014 13:26

Delphi DLL Schnittstelle zu C#
 
Ich habe eine Test-Schnittstelle von Delphi nach C# geschrieben.

Hier ist der Delphi Code der DLL:
Code:

type
ITest = interface
  ['{D032F796-167D-4B0D-851D-2AEEA226646A}']
  Function GetTest : Integer; stdcall;
  Procedure SetTest(value : integer); stdcall;
end;

TTest = class(TInterfacedObject, ITest)
   public Function GetTest : Integer; stdcall; export;
   public Procedure SetTest(value : integer); stdcall; export;
   public Test: integer;
end;

Function TTest.GetTest() : Integer; stdcall; export;
begin
  result := Test;
end;

Procedure TTest.SetTest(value : Integer); stdcall; export;
begin
  Test := value;
end;

function GetTest() : TTest; stdcall; export;
begin
  Result := TTest.Create;
end;

exports
  GetTest;

end.
Hier der C# Code:

Code:
namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        [ComImport, Guid("2B4AD756-C379-4BAB-9804-72E9A9E0B26F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        public interface ITest
        {
            [MethodImplAttribute(MethodImplOptions.PreserveSig)]
            [return: MarshalAs(UnmanagedType.U1)]
            void SetTest(int value);
            [MethodImplAttribute(MethodImplOptions.PreserveSig)]
            [return: MarshalAs(UnmanagedType.U1)]
            int GetTest();
        }

        public abstract class TTest : ITest
        {
            public abstract void SetTest(int value);
            public abstract int GetTest();
        }

        [DllImport("Schnittstellen_1.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]
        public static extern TTest GetTest();    

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Initialized(object sender, EventArgs e)
        {
            GetTest().SetTest(2);
            MessageBox.Show(GetTest().GetTest().ToString());
        }
    }
}
Wäre extrem dankbar, wenn sich jemand den Code durchlesen und auf Fehler überpfüfen könnte.

Fehlermeldung in VisualStudio:
In System.Runtime.InteropServices.COMException ist eine Ausnahme aufgetreten.

Unbekannter Fehler(Ausnahme von HRESULT: 0x80004005(E_FAIL))

EWeiss 16. Jul 2014 13:51

AW: Delphi DLL Schnittstelle zu C#
 
Was mir noch auffällt warum zwei unterschiedliche GUIDS für das gleiche Interface ??
ITest C# Guid("2B4AD756-C379-4BAB-9804-72E9A9E0B26F")
ITest Delphi ['{D032F796-167D-4B0D-851D-2AEEA226646A}']

gruss

TTF 16. Jul 2014 14:58

AW: Delphi DLL Schnittstelle zu C#
 
Danke vielmals
Werd's später nochmals versuchen;D

TTF 16. Jul 2014 22:22

AW: Delphi DLL Schnittstelle zu C#
 
Könntest du mir eventuell noch den vollständigen Code schicken?
(Mit Deklarationen)
Danke im Voraus
TTF

EWeiss 17. Jul 2014 08:10

AW: Delphi DLL Schnittstelle zu C#
 
Zitat:

Zitat von TTF (Beitrag 1265722)
Könntest du mir eventuell noch den vollständigen Code schicken?
(Mit Deklarationen)
Danke im Voraus
TTF

Vollständigen Code?
Verstehe nicht was du damit meinst.

Meine Dll ist Closed Source abgesehen von ein paar Schnipseln daraus.

Sorry.

gruss

TTF 17. Jul 2014 08:29

AW: Delphi DLL Schnittstelle zu C#
 
Jetzt wo du deinen Source code herausgenommen hast kann ich es dir logischerweise nicht erklären. Ich habe ihn nicht abgespeichert.

EWeiss 17. Jul 2014 09:06

AW: Delphi DLL Schnittstelle zu C#
 
Zitat:

Zitat von TTF (Beitrag 1265744)
Jetzt wo du deinen Source code herausgenommen hast kann ich es dir logischerweise nicht erklären. Ich habe ihn nicht abgespeichert.

Dann häng doch mal dein Projekt an..
Die kleine DLL und das WPF Projekt so das ich es mal hier kompilieren und ändern/ausführen kann.

gruss

TTF 17. Jul 2014 10:34

AW: Delphi DLL Schnittstelle zu C#
 
Liste der Anhänge anzeigen (Anzahl: 1)
Cool danke!:thumb:

EWeiss 17. Jul 2014 10:47

AW: Delphi DLL Schnittstelle zu C#
 
Zitat:

Zitat von TTF (Beitrag 1265752)
Cool danke!:thumb:

Leider fehlt das Projekt der DLL ;)
Zitat:

{"Der Einstiegspunkt \"GetTest\" wurde nicht in der DLL \"Schnittstellen_1.dll\" gefunden.":""}
Den Fehler habe ich schon behoben basierend auf oben geposteten Code Schnipsel.
Zitat:

In System.Runtime.InteropServices.COMException ist eine Ausnahme aufgetreten.
gruss

TTF 17. Jul 2014 11:42

AW: Delphi DLL Schnittstelle zu C#
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oh Entschuldigung

Hier ist das Projekt:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Seite 1 von 2  1 2      

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