2012-02-24 29 views
5

Tôi đang tìm cách tạo đối tượng COM trong macro VBA và sau đó chuyển nó vào một Delphi DLL (D2009). Tuyên bố thủ tục của tôi trong Delphi trông như thế nào?vượt qua adoconnection từ vba để delphi

Bối cảnh: Tôi đang mong đợi (hy vọng) các macro VBA để: tạo đối tượng COM, gọi Delphi DLL, vượt qua các đối tượng COM thủ tục Delphi DLL, sống sót cho đến khi Delphi DLL đóng chính nó (DLL sẽ có các biểu mẫu nhúng cho người dùng tương tác với). Tôi nghĩ rằng tôi sẽ cần phải tạo ra một chức năng gọi lại để cho vĩ mô VBA biết rằng tôi đang thực hiện để nó có thể dọn dẹp nhưng tôi sẽ làm việc trên đó một cách độc lập của câu hỏi này. Tôi có thể làm như vậy ?.

CẬP NHẬT Cụ thể hơn: Tuyên bố hàm được xuất là gì đối với DLL Delphi.

Trả lời

8

bạn phải vượt qua ADO giao diện kết nối liên kết _Connection thủ tục delphi sau đó tạo TADOConnection dụ và thay thế ConnectionObject với liên kết giao diện mới

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. 

nó là tốt hơn để sử dụng stdcall ước gọi. sử dụng export từ khóa setConnection proc có sẵn từ uotside với SetDBConnection tên, vì vậy bạn có thể LoadLibrarygetProcAddress để tìm điểm vào nó (thực sự tôi không biết VBA nên tôi không thể nói như thế nào để tải thư viện sử dụng nó)

+0

Cảm ơn bạn vì điều đó - nó sẽ hữu ích cho giai đoạn tiếp theo. Tôi đã thêm vào câu hỏi ban đầu của mình để làm rõ rằng tôi đang tìm kiếm tờ khai ** xuất **. –

+0

@SilentD, tôi đã thêm mã với 'xuất 'phần – teran

+1

Không cần' LoadLibrary'/'GetProcAddress' trong VBA. Bạn sẽ sử dụng 'Declare'. Nhưng 'stdcall' là điều cần thiết vì đó là tất cả những gì VBA biết. –

Các vấn đề liên quan