Entwickler-Ecke
Basistechnologien - Anfängerfragen zum Thema Delphi Win32 DLL und C#
pajofego - So 05.03.06 11:33
Titel: Anfängerfragen zum Thema Delphi Win32 DLL und C#
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
Christian S.: Topic aus Windows API verschoben am So 05.03.2006 um 11:56
Neidhard von Reuental - 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. - 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
pajofego - 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:
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!