Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何从COM(类型库)返回TADOConnect_Delphi_Delphi 7 - Fatal编程技术网

Delphi 如何从COM(类型库)返回TADOConnect

Delphi 如何从COM(类型库)返回TADOConnect,delphi,delphi-7,Delphi,Delphi 7,我正在使用Delphi7,我想在不同的Delphi应用程序之间共享ADO连接对象。如何使用类型库实现这一点 在创建方法时,我只能返回String/integer/somedatatype,并且没有看到任何TADOConnection。如何返回tADOConnection 一个TAdoConnection,以及AdoDB.PAS中定义的所有其他TAdoxxx对象, “位于”并使用在Windows的ADO子系统中创建的对象。 如果查看D7源单元AdoInt.Pas,这是一个类型库导入 C:\PROG

我正在使用Delphi7,我想在不同的Delphi应用程序之间共享ADO连接对象。如何使用类型库实现这一点

在创建方法时,我只能返回String/integer/somedatatype,并且没有看到任何TADOConnection。如何返回tADOConnection


一个TAdoConnection,以及AdoDB.PAS中定义的所有其他TAdoxxx对象, “位于”并使用在Windows的ADO子系统中创建的对象。 如果查看D7源单元AdoInt.Pas,这是一个类型库导入 C:\PROGRAM FILES\COMMON FILES\SYSTEM\ADO\MSADO15.DLL的名称。对象接口之一 其中定义的是_连接,它是完成所有工作的一个实例 用于TAdoConnection

在AdoInt.Pas中定义的一些接口对象跨流程边界工作, 最值得注意的是
记录集
对象,它是作为中间对象的ADO级对象 在服务器和Delphi端之间,如TAdoQuery, David Sceppa的“编程ADO”一书(微软出版社)中有一章介绍了这一点 我已经编写了一个测试COM服务器,它通过COM提供一个记录集对象,并且运行良好

然而,就我通过实验所能确定的,这是不可能的 获取一个TAdoConnection或其底层ConnectionObject以跨进程工作 使用COM的边界


但是,如果最初促使您朝这个方向思考的只是在每个新项目中以相同的方式设置ADOConnection的单调乏味,那么我个人要做的就是派生一个自定义的TAdoConnection后代,它设置您在代码中始终使用的属性,然后将其注册到Delphi中,使其显示在组件调色板上。

您不能将Delphi类变成COM对象。COM只返回它支持的某些类型,Delphi类不是其中之一。从表面上看,你试图做的事情似乎比它的价值要麻烦得多。为什么您认为您需要在应用程序之间“共享”连接?你希望它能带来什么好处?@MartynA:我们有一个基础应用程序,需要一直运行。所以我想创建一个TADOConnection对象并连接到基础应用程序中的数据库,并在所有其他应用程序中使用相同的连接。您知道COM“封送”吗?您不能跨不同线程共享ado连接对象。如果必须,请共享连接字符串。在内部,只要您使用确切的连接字符串,它将使用不同的连接对象进行池。@kobik:谢谢,但我不确定这些答案是否正确,因为我在不同线程中的AdoConnections之间共享了一个ConnectionObject,以简化在后台检索查询结果的过程。@kobik:请参阅更新,也许可以抵制说“我早就告诉过你了”的诱惑;=)