Dot-Net
在 Delphi 程序中託管 .NET 執行時
我正在考慮在 Delphi 程序中使用一些 .NET 程式碼,我需要使用 .net 程序集和預定義函式(我已經支持正常 DLL)使我的程序可擴展。
經過大量的線上搜尋,我找到了 Managed-VCL,但我還沒有準備好為我需要的東西支付 250 美元,我還發現一些新聞組的程式碼不完整且無法正常工作。
我正在將 Delphi 2007 用於 win32。我可以使用什麼來從具有預定義參數的程序集中動態執行函式?
就像是:
procedure ExecAssembly(AssemblyFileName:String; Parameters: Variant);我只想補充一點,我需要能夠載入任意程序集(可能是特定文件夾中的所有程序集),因此創建 C# 包裝器可能不起作用。
在 Jedi Code Library (JCL) - 免費 - 有一個 JclDotNet.pas,包含一個類 TJclClrHost,可能做你想做的事:
TJclClrHost = class(TJclClrBase, ICorRuntimeHost) private FDefaultInterface: ICorRuntimeHost; FAppDomains: TObjectList; procedure EnumAppDomains; function GetAppDomain(const Idx: Integer): TJclClrAppDomain; function GetAppDomainCount: Integer; function GetDefaultAppDomain: IJclClrAppDomain; function GetCurrentAppDomain: IJclClrAppDomain; protected function AddAppDomain(const AppDomain: TJclClrAppDomain): Integer; function RemoveAppDomain(const AppDomain: TJclClrAppDomain): Integer; public constructor Create(const ClrVer: WideString = ''; const Flavor: TJclClrHostFlavor = hfWorkStation; const ConcurrentGC: Boolean = True; const LoaderFlags: TJclClrHostLoaderFlags = [hlOptSingleDomain]); destructor Destroy; override; procedure Start; procedure Stop; procedure Refresh; function CreateDomainSetup: TJclClrAppDomainSetup; function CreateAppDomain(const Name: WideString; const Setup: TJclClrAppDomainSetup = nil; const Evidence: IJclClrEvidence = nil): TJclClrAppDomain; function FindAppDomain(const Intf: IJclClrAppDomain; var Ret: TJclClrAppDomain): Boolean; overload; function FindAppDomain(const Name: WideString; var Ret: TJclClrAppDomain): Boolean; overload; class function CorSystemDirectory: WideString; class function CorVersion: WideString; class function CorRequiredVersion: WideString; class procedure GetClrVersions(VersionNames: TWideStrings); overload; class procedure GetClrVersions(VersionNames: TStrings); overload; property DefaultInterface: ICorRuntimeHost read FDefaultInterface implements ICorRuntimeHost; property AppDomains[const Idx: Integer]: TJclClrAppDomain read GetAppDomain; default; property AppDomainCount: Integer read GetAppDomainCount; property DefaultAppDomain: IJclClrAppDomain read GetDefaultAppDomain; property CurrentAppDomain: IJclClrAppDomain read GetCurrentAppDomain; end;