我有DLL函數在TClientDataSet上執行,如要加載的設置文件以及加載和保存文件。在Delphi應用程序中訪問DLL中加載的TClientDataset的內容
unit dll_dmunit;
interface
uses
System.SysUtils, System.Classes, Data.DB, Datasnap.DBClient, Vcl.Dialogs,Vcl.DBGrids;
type
TStudentModule = class(TDataModule)
StudentSet: TClientDataSet;
StudentSource: TDataSource;
StudentSetNAME: TStringField;
StudentSetID: TIntegerField;
StudentSetAGE: TIntegerField;
StudentSetSLNo: TAutoIncField;
dlgOpen: TOpenDialog;
dlgSave: TSaveDialog;
private
{ Private declarations }
public
end;
function loadfile:tdbgrid;stdcall;
procedure setfile(fname:string);stdcall;
procedure savefile;stdcall;
var
StudentModule: TStudentModule;
filename:string;
grid:TDBgrid;
const
path:string='C:\Users\GlobalLogic\Documents\RAD Studio\Projects\Student\test.cds';
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
procedure setfile(f_name: string);stdcall;
begin
filename:=f_name;
end;
function loadfile:tdbgrid;stdcall;
var
_xmldata:string;
begin
StudentModule := TStudentModule.Create(nil);
grid:=TDBGrid.Create(nil);
result:=grid;
try
filename:='C:\Users\GlobalLogic\Documents\RAD Studio\Projects\Student\test.cds';
StudentModule.StudentSet.LoadFromFile(filename);
grid.DataSource:=StudentModule.StudentSource;
_xmldata :=StudentModule.StudentSet.XMLData;
result:=grid;
finally
StudentModule.Free;
end;
showmessage('End of the function');
end;
procedure savefile;stdcall;
begin
StudentModule.StudentSet.SaveToFile(filename);
end;
end.
我能夠執行的loadFile方法,但現在我需要在TClientDataSet的內容導出到Delphi應用程序。爲此,我試圖獲取TDbgrid中的內容,然後將此對象返回到應用程序層,但我無法這樣做。 然後我嘗試讀取XML格式,但無法理解如何傳遞和解碼XML格式。我需要將加載的數據集的內容移動到我想要顯示數據的應用程序中。 請幫我這樣做。 謝謝
您無法跨DLL邊界傳遞Delphi對象。通過跨DLL邊界使用字符串,你已經弄錯了。你似乎在尋找的是運行時軟件包。如果放棄單獨的模塊並將所有代碼編譯到可執行文件中,它會讓你的生活變得更加輕鬆。 –
@ DavidHeffernan - 我是這門語言的新手,所以我無法理解您的回答,您可以幫助我解決一些代碼或鏈接,這些代碼或鏈接可以讓我更好地理解您所談論的概念。 –
直到我知道你的目標和要求是什麼時,我才真正想進入更多的細節。 –