【问题标题】:Accessing TClientDataSet in a DLL在 DLL 中访问 TClientDataSet
【发布时间】:2014-05-12 05:00:40
【问题描述】:
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;

procedure loadfile;stdcall;
procedure set_file(name_of_file:string);stdcall;

var
  StudentModule: TStudentModule;
  filename:string;

implementation

procedure set_file(name_of_file: string);stdcall;
   begin
     filename:=name_of_file;
   end;

 procedure loadfile;stdcall;
   begin
     StudentModule.StudentSet.LoadFromFile(filename);
   end;
 end.

这是我包含在 DLL 中的单元,我在 export 子句中导出了函数 loadfile。 当我在程序中使用这个函数时,我得到一个地址冲突的错误读取。 我需要对 TClientDataSet 执行操作,例如加载和保存在 Dll 中,然后在程序中使用这些操作。 首先我调用 set_file 方法来初始化文件名 请帮助我解决这个问题。 谢谢你的期待。

【问题讨论】:

    标签: delphi dll delphi-7 tclientdataset


    【解决方案1】:

    您需要先创建数据模块。您正在尝试使用尚不存在的对象。这就是您看到访问冲突的原因。您也没有文件名中的值。你应该做的是这样的:

    procedure loadfile; stdcall;
    var
      studentDataModule: TStudentModule;
      fileToLoad: string;
    begin
      studentDataModule := TStudentModule.Create(nil);
      try
        // Set filename to something
        fileToLoad := 'Myfile.dat';
        // Load the file
        StudentModule.StudentSet.LoadFromFile(fileToLoad);
        // Do something else
        ...
      finally
        studentDataModule.Free;
      end;
    end;
    

    我没有故意使用你的两个全局变量。没有什么可以初始化这些。

    【讨论】:

    • 我可以在我的应用程序中调用 Dll 的这个 loadfile 方法并在 DLL 端加载 TclientDataSet。现在我希望 DLL 中 TClientDataSet 的内容在应用程序端可见。请帮我解决这个问题。
    • @user3615007 您应该将该请求放入一个新问题中。当您尝试在 DLL 和 Delphi 应用程序之间共享 TClientDataSet 时,这将有助于为您的问题提供一些背景知识。我不确定这是做事的最佳方式。一些背景知识可以帮助人们理解原因,他们可能会为您提供更好的解决方案。
    • 感谢 Graymatter 我一定会将我的请求放在一个新问题中,以便更好地了解我的问题,以便其他人可以轻松地帮助我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多