передать присоединение от VBA к Delphi - PullRequest
5 голосов
/ 24 февраля 2012

Я хочу создать COM-объект в макросе VBA и затем передать его в DLL-библиотеку Delphi (D2009). Как должно выглядеть объявление моей процедуры в Delphi?

Справочная информация: Я ожидаю (надеюсь) макрос VBA: создать объект COM, вызвать Delphi DLL, передать объект COM в процедуру DLL Delphi, оставайтесь в живых до тех пор, пока DLL-библиотека Delphi не закроется сама (в DLL будут встроенные формы для взаимодействия с пользователем).

Я думаю, мне нужно создать функцию обратного вызова, чтобы макрос VBA знал, что я закончил, чтобы он мог привести в порядок, но я буду работать над этим независимо от этого вопроса.

UPDATE Более конкретно: каким должно быть объявление экспортированной функции для DLL-библиотеки Delphi.

1 Ответ

8 голосов
/ 24 февраля 2012

вы должны передать ссылку интерфейса 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 доступно из uotside с именем SetDBConnection, поэтому вы можете LoadLibrary и getProcAddress найти его точку входа (на самом деле я не знаю VBA, поэтому не могу сказать, как загрузить библиотеку, используя ее)

...