2012-02-24 21 views
5

Sto cercando di creare un oggetto COM in una macro VBA e quindi passarlo a una DLL Delphi (D2009). Come dovrebbe apparire la mia dichiarazione di procedura in Delphi?passaggio adoconnection da vba a delphi

Background: mi aspetto (sperando) la macro VBA per: creare l'oggetto COM, richiamare la DLL Delphi, passare l'oggetto COM alla procedura Delphi DLL, rimanere in vita fino a quando la DLL Delphi chiude stesso (la DLL avrà moduli incorporati per l'utente con cui interagire).

Penso che avrò bisogno di creare una funzione di callback per consentire alla macro VBA di sapere che ho finito in modo che possa riordinare, ma lavorerò su quello indipendentemente da questa domanda.

UPDATE In particolare: quale dovrebbe essere la dichiarazione di funzione esportata per la DLL Delphi.

risposta

8

devi passare collegamento Interfaccia di collegamento ADO _Connection alla procedura di Delphi quindi creare un'istanza TADOConnection e sostituirlo con ConnectionObject nuovo link di interfaccia

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. 

è meglio usare stdcall convenzione di chiamata. utilizzando export parola chiave setConnection proc è disponibile da uotside con SetDBConnection nome, in modo da poter LoadLibrary e getProcAddress di trovare il suo punto di ingresso (in realtà non so VBA quindi non posso dire come caricare la libreria usando)

+0

Grazie per quello - sarà utile per il prossimo stadio. Ho aggiunto alla mia domanda iniziale per chiarire che sto cercando la dichiarazione ** exports **. –

+0

@SilentD, ho aggiunto il codice con la parte 'exports' – teran

+1

Non c'è bisogno di' LoadLibrary'/'GetProcAddress' in VBA. Dovresti usare un 'Declare'. Ma 'stdcall' è essenziale poiché è tutto ciò che VBA conosce. –