2012-02-24 9 views
5

Estoy buscando crear un objeto COM en una macro VBA y luego pasarlo a una DLL de Delphi (D2009). ¿Cómo debería ser la declaración de mi procedimiento en Delphi?pase adoconnection de vba a delphi

Antecedentes: estoy esperando (la esperanza) de la macro de VBA para: crear el objeto COM, invocar la DLL de Delphi, pasar el objeto COM para el procedimiento Delphi DLL, seguir con vida hasta que la DLL de Delphi cierra en sí (la DLL tendrá formularios incrustados para que el usuario interactúe).

Creo que tendré que crear una función de devolución de llamada para que la macro de VBA sepa que he terminado, para que pueda arreglar pero voy a trabajar en eso independientemente de esta pregunta.

ACTUALIZACIÓN Más específicamente: ¿Cuál debería ser la declaración de la función exportada para la DLL de Delphi.

Respuesta

8

usted tiene que pasar enlace de interfaz de conexión ADO _Connection al procedimiento de Delphi continuación, crear una instancia TADOConnection y reemplazar ConnectionObject con el nuevo enlace de interfaz

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. 

es mejor utilizar stdcall convención de llamada. export usando la palabra clave setConnection proc está disponible de uotside con SetDBConnection nombre, por lo que puede LoadLibrarygetProcAddress y encontrar su punto de entrada (realmente no sé VBA así que no puedo decir cómo cargar la biblioteca de usarlo)

+0

Gracias para eso, será útil para la próxima etapa. Agregué a mi pregunta original para aclarar que estoy buscando la declaración ** exports **. –

+0

@SilentD, he agregado código con la parte 'exports' – teran

+1

No es necesario' LoadLibrary'/'GetProcAddress' en VBA. Utilizarías un 'Declare'. Pero 'stdcall' es esencial ya que eso es todo lo que VBA sabe. –