从vba传递adoconnection到delphi

时间:2012-02-24 16:54:58

标签: delphi com vb6

我想在VBA宏中创建一个COM对象,然后将其传递给Delphi DLL(D2009)。我在Delphi中的程序声明应该是什么样的?

背景: 我期待(希望)VBA宏:    创建COM对象,    调用Delphi DLL,    将COM对象传递给Delphi DLL程序,    保持活着直到Delphi DLL自行关闭(DLL将有嵌入的表单供用户与之交互)。

我想我需要创建一个回调函数让VBA宏知道我已经完成了它可以整理,但我将独立于这个问题进行处理。

UPDATE 更具体地说:导出的函数声明应该用于Delphi DLL。

1 个答案:

答案 0 :(得分:8)

您必须将ADO Connection接口链接_Connection传递给delphi过程 然后创建TADOConnection实例并用新接口链接替换ConnectionObject

library Project1;
uses ADODB;

{$R *.res}

    procedure SetConnection(aDBConnection : _Connection);  stdcall;
    var connect : TADOConnection;
    begin
        connect := TADOConnection.Create(nil);
        try
            connect.ConnectionObject := aDBConnection;
            //here you can use your connection
        finally
            connect.Free();
        end;
    end;


exports SetConnection name 'SetDBConnection';

begin
end.

最好使用stdcall调用约定。使用export关键字setConnection proc可以使用SetDBConnection名称从uotside获取,因此您可以LoadLibrarygetProcAddress找到其入口点(我真的不知道)知道VBA所以我不能说如何使用它加载库)