Autor Beitrag
pajofego
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 05.03.06 11:33 
Hallo Leute,

ich versuche mich schon seit längerem mich an das Thema DLL in Delphi schreiben und in C# verwenden. Dabei stoße ich meinerseits auf Grundlagenprobleme.

Ich möchte komplexe Datentypen und Klassen in Delphi in einer DLL verpacken und in C# benutzen. Ist es richtig, dass man

a) die Delphidatentypen in Form von Klassen und records o.ä nicht direkt in C# aufrufen kann bzw. nur wenn man diese schaffen würde in C# nachzubauen.

b) in DLL nur funktionen direkt exportiert werden können und nicht die funktionen einer Delphi Klasse?

Was kann man denn höchstens machen, wenn man Delphi Code hat und möchte diesen in C# benutzen? Außer diesen in C# umzuschreiben?

Danke,

Gruß

pajofego


Moderiert von user profile iconChristian S.: Topic aus Windows API verschoben am So 05.03.2006 um 11:56
Neidhard von Reuental
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 268

XP
BDS 2006 Prof
BeitragVerfasst: So 05.03.06 11:59 
da du c# verwendest gehe ich davon aus das du für .NET programmierst. normale w32-dll's kann man zwar verwenden, sollte es aber nicht.
versuch statt dessen delphi für .NET zu verwenden. klassen und typen in fertigen packages kannst du ohne probleme in c# verwenden
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 05.03.06 13:01 
Hallo!

Vorweg: Ich habe dieses Topic mal ins C#-Forum verschoben. War mir etwas unsicher, wo es hingehört, aber da die Plattform, auf der Dein Programm hinterher laufen soll, .NET ist, hab ich's mal hierhin gepackt :-)

Nun zu Deiner Frage:

Ich gehe davon aus, dass die DLLs, welche Du in Delphi geschrieben hast, Win32 sind. Da würde ich tatsächlich Neidhards Rat folgen und diese in Delphi .NET (Winforms, ohne VCL .NET) als Package kompilieren. Das erstellt Dir eine .NET-Dll, welche Du in C# nutzen kannst. Aber auch da wirst Du einiges an Arbeit reinstecken müssen, weil Du natürlich die ganzen Borland-Units drin hast, welche Du durch die entsprechenden Standard-.NET-Funktionen ersetzen musst.

Es müsste auch möglich sein, eine entsprechende DLL mit der VCL .NET zu kompilieren, allerdings weiß ich nicht, wie es da mit der Kompatiblität mit C# aussieht. Außerdem wird die dann entweder sehr groß (die entsprechenden Borland-Assemblies reinlinken) oder Du musst die Assemblies mit ausliefern.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
pajofego Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: So 05.03.06 15:56 
Hallo,

erst einmal danke.

Die Option Delphi.NET zu verwenden will ich nicht, da es sich hierbei um sehr zeitintensive - numerische Berechnungen - handelt. Nach Möglichkeit verwende ich dort auch Assembler Code auch will ich die DLL in freepascal compilierbar machen.

So in etwa sieht zum größten Teil die Struktur meines Codes aus:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
library DLL_Test;

uses
  SysUtils, Classes;

type
  TMyValue = Double;
  TMyValueArray = array of TMyValue;
  TMyArrayClass = class(TObject)
public
  function AddiereArrays(ArrayVal1, ArrayVal2 : TMyValueArray):TMyValueArray; stdcall;
end;
  
function TMyArrayClass.AddiereArrays(ArrayVal1, ArrayVal2 : TMyValueArray):TMyValueArray; stdcall;
var 
  i : integer;
  tempArray :TMyValueArray;
begin
  tempArray := nil;
  if not High(ArrayVal1) = High(ArrayVal2) then
    writeln('Array mit unterschiedlicher Groesse !!!')
  else
  begin
    SetLength(tempArray, High(ArrayVal1));
      for i := 0 to High(ArrayVal1) do
        tempArray[i] := ArrayVal1[i] + ArrayVal2[i];
  end;
  AddiereArrays := tempArray;
end;

exports
  // ?
begin
end.


Was davon und vor allem wie könnte ich von C# aus verwenden?

Danke,

Gruß

pajofego