Delphi-PRAXiS
Seite 2 von 2     12   

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)

EWeiss 17. Jul 2014 16:52

AW: Delphi DLL Schnittstelle zu C#
 
Habe alle mir bekannten Möglichkeiten ausgeschöpft
komme leider zu keinem Ergebnis.

Vielleicht hilft dir dieser Beitrag weiter.

http://www.delphipraxis.net/159737-z...i-library.html
Letzter Beitrag.

Sorry :cry:

gruss

Blup 18. Jul 2014 08:28

AW: Delphi DLL Schnittstelle zu C#
 
Ohne mich mit der Problematik näher auseinander zu setzen:
Sollte GetTestClass nicht "ITest" liefern statt "TTest"?
Schließlich kennt nur die DLL die konkrete Klasse.

TTF 18. Jul 2014 10:24

AW: Delphi DLL Schnittstelle zu C#
 
Danke hab ich probiert. Dann weiss ich halt einfach nicht was ich damit in C# anfangen soll. Ich kann ja kein Objekt davon erzeugen oder so...
Ich wäre sehr froh, wenn du dir den C# Code noch einmal angucken könntest...Ich habe irgendwie immer mehr das Gefühl, dass nicht allzu viel von dem Sinn ergibt:oops::lol:

Herzlichen Dank an EWeiss für seine Bemühungen.

Elvis 18. Jul 2014 10:31

AW: Delphi DLL Schnittstelle zu C#
 
Man sollte aufpassen, wenn man mit Delphi sdtcall benutzt.
Delphi übergibt rückgabewerte anders, als es unter Windows eigenetlich sein sollte.
Es ist deshalb angebracht diese als out-Parameter zurückzugeben:

Delphi-Quellcode:
procedure GetTestClass(out value : ITest); stdcall; export;
begin
  value := TTest.Create;
  value.SetTest(5);
end;

Code:
[DllImport("Schnittstellen_1", EntryPoint = "GetTestClass", SetLastError = true)]
public static extern void GetTest(out ITest value);

public static void Main()
{
    ITest test;
    GetTest(out test);
    Debug.Assert(test.Test == 5);
    test.Test = 2;
    Debug.Assert(test.Test == 2);
Außerdem, woher hast du denn das mit dem UnmanagedType.U1?
Ein Integer in Delphi ist binär kompatibel mit einem Int32 in .Net, den man in C# auch "int" nennen kann.

Wenn du in Delphi die Interface-methoden als safecall markierst, wird sie Delphi für dich so ummodeln, dass sie dem HResult-Pattern aus der COM-Welt passen:
Delphi-Quellcode:
ITest = interface
  ['{D032F796-167D-4B0D-851D-2AEEA226646A}']
  function GetTest : Integer; safecall;
  procedure SetTest(value : integer); safecall;
end;
Dann würde das Interface in C# so aussehen:
Code:
[ComImport, Guid("D032F796-167D-4B0D-851D-2AEEA226646A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITest
{
    int Test { get; set; }
}
Wenn du es so lassen willst wie jetzt, würde man es in C# trotzdem als property mappen:
Code:
[ComImport, Guid("D032F796-167D-4B0D-851D-2AEEA226646A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITest
{
    int Test
    {
        [MethodImplAttribute(MethodImplOptions.PreserveSig)]
        get;
        [MethodImplAttribute(MethodImplOptions.PreserveSig)]
        set;
    }
}
btw, du hast da EINIGE Dinge eingebaut, die da überhaupt nicht hingehören:
  • Deine exportierte Funktion hat keine String, warum also Unicode im DllImport?
  • stdcall ist die nromale CallingConvention, muss da also nicht stehen.
  • Deine Interface-GUIDs waren unterschiedlich, wofür sind den die GUIDs wohl da, wenn nicht um das Interface in beiden System zu identifizieren? ;-)

TTF 18. Jul 2014 13:16

AW: Delphi DLL Schnittstelle zu C#
 
Wow danke!!!!:lol::lol::thumb::corky::chat:

Du bist genial:thumb:

Funzt perfekt !Da verfliegt doch der Ärger über meine blöden Fehler schnell:roll::wall:

EWeiss 18. Jul 2014 13:23

AW: Delphi DLL Schnittstelle zu C#
 
Zitat:

Zitat von TTF (Beitrag 1265906)
Wow danke!!!!:lol::lol::thumb::corky::chat:

Du bist genial:thumb:

Funzt perfekt !Da verfliegt doch der Ärger über meine blöden Fehler schnell:roll::wall:

;)

@Elvis :thumb:
War dann doch der richtige Beitrag den ich verlinkt habe.
Na dann! Schön das es nun funktioniert.

gruss

TTF 18. Jul 2014 13:28

AW: Delphi DLL Schnittstelle zu C#
 
Zitat:

Zitat von EWeiss (Beitrag 1265810)
Habe alle mir bekannten Möglichkeiten ausgeschöpft
komme leider zu keinem Ergebnis.

Vielleicht hilft dir dieser Beitrag weiter.

http://www.delphipraxis.net/159737-z...i-library.html
Letzter Beitrag.

Sorry :cry:

gruss

Siehste musst nicht weinen. War nicht dein letzter Beitrag:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz