【问题标题】:pass adoconnection from vba to delphi将adoconnection从vba传递到delphi
【发布时间】:2012-03-15 03:21:34
【问题描述】:

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

背景: 我期待(希望)VBA 宏: 创建 COM 对象, 调用 Delphi DLL, 将 COM 对象传递给 Delphi DLL 过程, 在 Delphi DLL 自行关闭之前保持活动状态(DLL 将嵌入表单供用户交互)。

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

更新 更具体地说:Delphi DLL 的导出函数声明应该是什么。

【问题讨论】:

    标签: delphi com vb6


    【解决方案1】:

    你必须将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 所以我不能说如何使用它加载库)

    【讨论】:

    • 感谢您的支持 - 这将对下一阶段有所帮助。我添加到我原来的问题以澄清我正在寻找 exports 声明。
    • VBA 中不需要LoadLibrary/GetProcAddress。您将使用Declare。但是stdcall 是必不可少的,因为这就是 VBA 所知道的一切。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2012-12-02
    相关资源
    最近更新 更多