【问题标题】:How use TDataset and Dll with Delphi如何在 Delphi 中使用 TDataset 和 Dll
【发布时间】:2011-09-22 16:03:53
【问题描述】:

我想创建一个 dll 来从文件中导入数据(不同的格式,例如 csv、txt、xls、...)。我的想法是:dll 使用她的“引擎”加载数据,然后将此数据发送到我的应用程序,以便我的应用程序可以在网格中显示它们。

这是我的第二个 DLL,所以我有一些问题/疑问。

我认为我的 DLL 应该将数据发送到我的应用程序上的 TDataset,但是我怎样才能以 TDataset 作为参数调用 DLL?

有什么建议吗? 实现我的想法的最简单方法是什么? (如果可能的话)

【问题讨论】:

    标签: delphi dll tdataset


    【解决方案1】:

    如果您是这些 DLL 的创建者,请考虑使用包而不是 DLL。这将避免出现重复的 Delphi RTTI、普通 DLL API 等问题。然后,您需要在包之间正确拆分类,静态或动态加载包,获取对实现导入引擎的类的引用,并使用数据集引用作为参数值调用相应的方法。

    【讨论】:

    • 这确实是推荐的方法,以防格式都是已知的。在我的类似项目中,我使用了动态加载的 DLL。因此,某些用户需要导入或导出他的数据格式,然后我可以编写新的 DLL,将其发送给他,他会配置程序以加载此 DLL。
    【解决方案2】:

    更简单的方法是将数据直接存储到 DLL 中的数据库中。导入后,您只需刷新 TDataset。

    顺便说一句,你不“调用 DLL”,你调用了 DLL 中的一些公共方法,在那里你可以像在普通方法中一样使用参数。

    编辑:对于不需要数据组件的更通用的 DLL,只需在结构中发送数据

     TMyData
     { int ID;
       String Value;
     };
    
    int MyDataImport(TMyData & data)
    {
    ...
    }
    

    【讨论】:

    • 是的,这是一种方法,如果我找不到任何其他解决方案,我想我会这样做。但是,我想从我的应用程序中发送提取数据并从 DLL 中发送点。这样实际上我的 DLL 将是一个通用 DLL,我将在其他项目中使用(使用不同的数据库引擎)。是的,我可以调用 DLL 的函数而不是 DLL :) 抱歉。
    • 我认为您不能将此 DLL 用作不同项目的通用 DLL,除非它们都使用相同的数据。
    • 好的,但在我的情况下,我有我的数据,我应该发送一个网格(包含行和列)...请仅使用 delphi 代码(如果可能),无论如何谢谢
    • 我的建议:如果您有机会使用包,请不要使用 DLL。包实际上是 DLL,但有很多关于 Delphi 数据类型的额外“知识”,因此它们不需要考虑什么可以传入和传出,或者如何传入和传出。这就像使用单位。在应用程序和 DLL 之间传递类实例通常是个坏主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多