2012-02-24 14 views
5

Szukam utworzyć obiekt COM w makrze VBA, a następnie przekazać go do DLL Delphi (D2009). Jak powinna wyglądać moja deklaracja proceduralna w Delphi?prześlij adoconnection z vba do delphi

Tło: Czekam (nadzieję) VBA makro do: utworzyć obiekt COM, wywołać Delphi DLL, przekazać obiekt COM procedurze Delphi DLL, pozostać przy życiu aż do Delphi DLL zamyka sama (biblioteka DLL będzie zawierała osadzone formularze umożliwiające interakcję użytkownika).

Myślę, że będę musiał utworzyć funkcję zwrotną, aby umożliwić maku VBA, że skończyłem, aby można było posprzątać, ale będę pracował nad tym niezależnie od tego pytania.

AKTUALIZACJA Dokładniej: Co powinna mieć wyeksportowana deklaracja funkcji dla biblioteki DLL Delphi.

Odpowiedz

8

trzeba przejść Link Interface Connection ADO _Connection procedury delphi następnie utworzyć instancję TADOConnection i zastąpić ConnectionObject z nowego połączenia interfejsu

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. 

lepiej jest użyć stdcall wzywającą Konwencję. stosując export kluczowe setConnection proc jest dostępny od uotside z SetDBConnection nazwy, więc można LoadLibrarygetProcAddress i znaleźć swój punkt wejścia (naprawdę nie wiem, VBA, więc nie mogę powiedzieć, jak załadować bibliotekę używając go)

+0

Dziękuję za to - będzie to pomocne na następnym etapie. Dodałem do mojego pierwotnego pytania, aby wyjaśnić, że szukam ** deklaracji ** eksportu. –

+0

@SilentD, dodałem kod z 'export' part – teran

+1

Nie ma potrzeby' LoadLibrary'/'GetProcAddress' w VBA. Użyłbyś 'Declare'. Ale 'stdcall' jest niezbędny, ponieważ to wszystko wie VBA. –