![]() |
c# DLL .NET in DELPHI32 nutzen
Hallo,
ich habe ein dokumentierte .NET-DLL, die ich in DELPHI 7 unter Win32 nutzen möchte: Sie liegt als COM-Wrapper??? bzw. als .Net Assembly ??? vor: 1) meinedll.COM.dll 2) meiendll.COM.tlb 3) meinedll.dll In der Doku wird von Namensräumen und ihren Eigenschaften gesprochen! Ich habe keine Ahnung wie ich diese DLLs einbinden und dann nutzen kann ;-(( Um das konkret zu machen: Ein Namensraum lautet "Version" und besitzt die Eigenschaft "Major" Typ: int Ich würde nun gerne den Zugriff testen, in dem ich per ButtonClick diese Eigenschaft auslese und als inttostr(Version.Major????) in einem Edit-Feld anzeige! |
Re: c# DLL .NET in DELPHI32 nutzen
Wenn ein COM-Wrapper vorliegt, und dieser das ist, was ich vermute, würde ich mich unter Delphi32 mal ganz schnell darauf (also auf die xxx.COM.DLL) stürzen.
Versuch doch mal die TypBibliothek zu importieren (irgendwo im Delphi-Menu)! |
Re: c# DLL .NET in DELPHI32 nutzen
Hallo
Dot.Net Dlls unterscheiden sich grundsätzlich von normalen Delphi bzw. C++ DLL's aus der WIN32 Welt. Bei einer Win32.dll stellt die DLL einen Satz an funktionen bereit die im Prenzip von jeder Sprache aus aufgerufen werden können. Bei einer C# DLL funktiert ganz anders. Dort liegen die Funkionen als vorkopmpilierter Quellcode vor und benötigen unbedingt die Dot.Net Runtime. ==> Ein normaler Aufruf aus Delphi ist (fast) unmöglich. Der Standard Weg den Microsoft empfiehlt ist der Umweg über .COM ( bzw AcitveX) ( Hat halt den Nachteil das alles wieder durch die Registry muss!) Im Internet findet man auch eine Methode die dot.net Runtime komplett in den eigenen Prozess zu laden, und von dort aus die c# DLL wieder anzusprechen ==> Ist aber (meiner Meinung nach) nur etwas für absolute Experten. Als Bastellösung kann man noch eine Anwendung in c# schreiben ( diese kann die DLL ohne Probleme Laden), und kommuniziert über eine selber ausgedachte Schnittstelle (Socket, Named Pipes, Mapped Memory ....) von Remobjects gibts ein Produkt names Hydra, auch damit sollte so etwas möglich sein ( noch nicht getestet) ==> An einer besseren Veriante wäre auch ich interessiert. mfg Reinhold Weinzierl |
Re: c# DLL .NET in DELPHI32 nutzen
Hallo,
vielen Dank für die Infos ich habe die COM.TLB überdie Typbibliothek importiert und auch eine entsprechende UNIT erzeugt, die ich nun in das Programm unter USES impementiert habe: Ausschnitt aus der NEUEN LIB-Unit:
Delphi-Quellcode:
Wahrscheinlich habe ich nur ein Brett vorm Kopf und der Zugriff ist ganz leicht zu bewerkstelligen???
interface
uses Windows, ActiveX, Classes, Graphics, mscorlib_TLB, OleServer, StdVCL, Variants; // *********************************************************************// // In dieser Typbibliothek deklarierte GUIDS . Es werden folgende // Präfixe verwendet: // Typbibliotheken : LIBID_xxxx // CoClasses : CLASS_xxxx // DISPInterfaces : DIID_xxxx // Nicht-DISP-Schnittstellen: IID_xxxx // *********************************************************************// const // Haupt- und Nebenversionen der Typbibliothek Sts_Db_SiZ_Usb_ComMajorVersion = 1; Sts_Db_SiZ_Usb_ComMinorVersion = 0; LIBID_Sts_Db_SiZ_Usb_Com: TGUID = '{9D632297-83A7-3DCC-80D1-65E37EE18965}'; IID_ISiZUsbCOM: TGUID = '{18CD27C2-3EDD-48D0-A2F5-2A7FB2C8E6A5}'; IID__SiZUsbCOM: TGUID = '{E3C6DF0A-23D3-38D1-810A-ED6BA2C8C241}'; CLASS_SiZUsbCOM: TGUID = '{FBE6DA18-7BC9-4671-83F9-8D477D3DC39B}'; type // *********************************************************************// // Forward-Deklaration von in der Typbibliothek definierten Typen // *********************************************************************// ISiZUsbCOM = interface; ISiZUsbCOMDisp = dispinterface; _SiZUsbCOM = interface; _SiZUsbCOMDisp = dispinterface; // *********************************************************************// // Deklaration von in der Typbibliothek definierten CoClasses // (HINWEIS: Hier wird jede CoClass zu ihrer Standardschnittstelle // zugewiesen) // *********************************************************************// SiZUsbCOM = _SiZUsbCOM; // *********************************************************************// // Schnittstelle: ISiZUsbCOM // Flags: (4416) Dual OleAutomation Dispatchable // GUID: {18CD27C2-3EDD-48D0-A2F5-2A7FB2C8E6A5} // *********************************************************************// ISiZUsbCOM = interface(IDispatch) ['{18CD27C2-3EDD-48D0-A2F5-2A7FB2C8E6A5}'] function Get_Version_Major: Integer; safecall; function Get_Version_Minor: Integer; safecall; function Get_Version_Build: Integer; safecall; .... Leider kann ich noch nicht auf die Funktionen - z.B. Get_Version_Major - aus der Bibliothek zugreifen: Fehler "Ungenügende Forward oder external - Deklaration"!!! Ausschnitt aus meinem Programm: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Sts_Db_SiZ_Usb_Com_TLB; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; function Get_Version_Major: Integer; safecall; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin showmessage(inttostr(Get_Version_Major)); end; ... [edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen! - Mfg, SirThornberry[/edit] |
Re: c# DLL .NET in DELPHI32 nutzen
Hi,
Entschuldigung: Schon mal mit Interfaces oder ActieX programmiert? In der Unit einen
Delphi-Quellcode:
schreiben, dann sollte es auch mit dem TLB-Import Funktionieren.
initialization
CoInitialize(nil); finalization CoUninitialize; |
Re: c# DLL .NET in DELPHI32 nutzen
Zitat:
Aber mit Interfaces umgehen, musst du noch lernen. Also (nur eine mögliche Variante):
|
Re: c# DLL .NET in DELPHI32 nutzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
vielen Dank für den Input - es ist wahr ich muss mich wirklich mal intensiver um INTERFACE-Prog kümmern ;-( Die Hinweise von Sirius haben mir insofern geholfen, dass ich nunmehr immerhin schon mal die Funktionen, Properties - rein vom Codevervollständiger - sehen und "nutzen" kann. Leider gibt es noch eine Fehlermeldung: Klasse nicht registriert! bzw. eine Zugriffsverletzung...! Hier mal mein Code zum gucken und ausserdem habe ich auch die DLL-Unit mit rangehängt: unit Unit1;
Delphi-Quellcode:
[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen - Mfg, SirThornberry[/edit]
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Sts_Db_SiZ_Usb_Com_TLB; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; myIntf1: _SiZUsbCOM; //Interface myIntf2: ISizUsbCOM; //Interface * // myIntf3: _SiZUsbCOMDisp; //DispInterface - Warnungshinweis plattformspezifisch // myIntf4: ISizUsbCOMDisp; //DispInterface - Warnungshinweis plattformspezifisch implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin myIntf1:=coSiZUsbCOM.create; // -> Fehlermeldung Klasse nicht registriert! end; procedure TForm1.Button1Click(Sender: TObject); var testzahl: integer; begin testzahl:= myIntf2.Version_Major; // -> Fehlermeldung Zugriffsverletzung showmessage(inttostr(testzahl)); if myIntf2.TrueCryptExists then showmessage('JA') else showmessage('Nein'); // -> hier auch Fehlermeldung Zugriffsverletzung end; end. |
Re: c# DLL .NET in DELPHI32 nutzen
Du hast auch soweit alles richtig gemacht. Bis auf, das du globale Variablen definiert hast (myIntfx). Nimm die doch bitte in eine Klasse (zB. zu TForm1 unter private Deklarationen)
Und noch dazu: Zitat:
|
Re: c# DLL .NET in DELPHI32 nutzen
Hallo Leute,
ich muss mich hier mal anhängen. :-D Seit geraumer zeit bin ich SecondLife verfallen und such eine möglichkeit die libsecondlife.dll in die Win32welt von Delphi zu bekommen. libsecondlife.dll ist in C# für .Net gecodet und OpenSource. Guggst du ![]() Alles was passiert das mir Delphi2007 beim Importieren von .Net eine mscorlib_TLB.pas erstellt und sich aufhängt. :( Ich habe es auch mit Delphi2006 versucht das kann aber kein .Net 2.0 Wenn jemand Rat weis oder vieleicht es schon gemacht hat wer einfach super. Besten Dank schon mal im Vorraus |
Re: c# DLL .NET in DELPHI32 nutzen
Hallo also mann kann aus manged code eine dll erzeugen mit der auch nicht .net sprachen arbeiten können als ob es eine normale dll wäre.
Guck mal ![]() Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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