AGB  ·  Datenschutz  ·  Impressum  







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

C# DLL in Delphi nutzen

Ein Thema von sonny2007 · begonnen am 27. Mär 2022 · letzter Beitrag vom 29. Mär 2022
Antwort Antwort
venice2
(Gast)

n/a Beiträge
 
#1

AW: C# DLL in Delphi nutzen

  Alt 27. Mär 2022, 21:40
Bringt nur nix wenn die Methode gar nicht exportiert wird und unterscheidet sich auch nicht wirklich von seiner Version. Oder übersehe ich etwas?
Jo warum dann LoadLibrary (gar nicht nötig) wenn sich die DLL im Anwendungspfad befindet.
Entweder es kommt was zurück beim direkten Aufruf oder nicht.

Und sie wird exportiert!
Code:
[DllExport(CallingConvention = CallingConvention.StdCall)]

Geändert von venice2 (27. Mär 2022 um 21:44 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: C# DLL in Delphi nutzen

  Alt 27. Mär 2022, 21:48
LoadLibrary() hat den Vorteil des Lazy Loadings. Wenn die DLL also nicht beim Programmstart direkt zur Verfügung stehe muss, dann kann man die auch erst verzögert laden. Macht den Anwendungsstart ggf. auch etwas schneller.

Und nur weil das Attribut darüber steht heißt das bei C# nicht zwangsläufig, dass die Methode auch exportiert wird. Zumindest ist das meine Erfahrung.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: C# DLL in Delphi nutzen

  Alt 27. Mär 2022, 21:55
Zitat:
Und nur weil das Attribut darüber steht heißt das bei C# nicht zwangsläufig, dass die Methode auch exportiert wird. Zumindest ist das meine Erfahrung.
Schlechte Erfahrungen gemacht? Na gut denn.
Meine Erfahrung entspricht deinem Gegenteil. aber muß mich nicht streiten.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: C# DLL in Delphi nutzen

  Alt 28. Mär 2022, 06:09
Hallo,
unter c++ wird an den Methodennamen immer was drangehangen,
vielleicht ist es in c# ja auch so.
Heiko
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: C# DLL in Delphi nutzen

  Alt 28. Mär 2022, 07:48
Du musst die Zielplattform im c# Projekt auf x86 setzten.

Die Declaration von

function ConvertToJson(pBytes: Pbyte; cBytes: Integer): string; stdcall; external 'MsgPack.Native.dll'; mit Rückgabe String wird auch nicht funktionieren.

Versuche es mit PWChar
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.681 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: C# DLL in Delphi nutzen

  Alt 28. Mär 2022, 09:25
Müsste es nicht

ConverToJson := GetProcAddress(dllhandle, 'ConvertToJson');

heißen?

Und evtl WideString anstatt String in der Deklaration der Funktion. Das mit 32bit und 64bit ist immer
etwas schwierig einzustellen in VS finde ich.

Nutzt Du DLLExport 1.7.4.? Al Beispiel mal mein Projekt

https://github.com/landrix/LibPhonenumber-for-Delphi
Sven Harazim
--
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

AW: C# DLL in Delphi nutzen

  Alt 28. Mär 2022, 11:40
Zitat:
Das mit 32bit und 64bit ist immer
etwas schwierig einzustellen in VS finde ich.
Ist doch gut gelöst Debug\Release "COMBO" und dort Konfigurations-Manager starten.

bzgl. x86 und x64 ist so ein Problem.
Was bringt es wenn die Bibliothek RGiesecke.DllExport mit AnyCPU kompiliert wurde das beißt sich doch irgendwie.

Delphi DLL -> C# über DllImport ist kein Problem.
C# DLL über DllExport hingegen schon. (Leider)

bsp.
Code:
namespace CalcTest
{
    using System.Runtime.InteropServices;
    using RGiesecke.DllExport;

    public sealed class CalcTest
    {
        [DllExport(CallingConvention = CallingConvention.StdCall)]
        public static int Sum(int a, int b)
        {
            return a + b;
        }
    }

}
Delphi.
function Sum(a, b: integer): integer; stdcall; external 'Calctest.Net.dll';

Delphi Anwendung stürzt sofort ab.. läßt sich nicht starten!

Fehler!
Der Fehler 0xc000007b tritt typischerweise auf, wenn die 32-Bit-Version von Windows mit einem 64-Bit-Betriebssystem oder -Anwendungen verwechselt wurde.
Projekt ist aber x86 C# DLL ebenso jedoch RGiesecke.DllExport AnyCPU ..

EDIT:
RGiesecke.DllExport neu kompiliert 32Bit\x86 alle Frameworks 4.8 trotzdem selber Fehler.

Geändert von venice2 (29. Mär 2022 um 10:32 Uhr)
  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 07:35 Uhr.
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