2012-02-24 6 views
5

私はVBAマクロでCOMオブジェクトを作成し、それをDelphi DLL(D2009)に渡したいと考えています。 Delphiでの私の手続き宣言はどのように見えるのですか?vbaからdelphiへの接続をアブノーマルにします

背景:私は期待してい (期待して)するVBAマクロ: は 、 は、Delphi DLLが閉じるまで が生き続ける、デルファイDLLプロシージャにCOMオブジェクトを渡すのDelphi DLLを呼び出す、COMオブジェクトを作成します(DLLにはユーザーが対話するための埋め込みフォームがあります)。

私はVBAマクロに私が完了したことを知らせるためにコールバック関数を作成する必要があると思うが、それはきちんと整えることができるが、私はこの質問とは独立に作業するだろう。

更新 具体的には、エクスポートされた関数の宣言はDelphi DLLのためにどうすべきですか?

答えて

8

あなたは、TADOConnectionのインスタンスを作成し、stdcall呼び出し規約を使用することをお勧めし新しいインターフェイスリンク

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. 

でConnectionObjectを交換デルファイ手続き にADO接続インタフェースリンク_Connectionを渡す必要があります。 exportキーワードのエントリポイントを見つけるために、あなたはLoadLibrarygetProcAddressをできるようsetConnection procは、SetDBConnection名前のuotsideから提供されています(私はそれを使用して、ライブラリをロードする方法を言うことができないので、本当に私はVBAを知らない)

+0

を使用していただき、ありがとうございますそのためには、次の段階に役立ちます。元の質問に、**輸出**宣言を探していることを明確にするために追加しました。 –

+0

@SilentD、 'exports'の部分にコードを追加しました – teran

+1

VBAで' LoadLibrary'/'GetProcAddress'の必要はありません。 'Declare'を使用します。しかし、 'stdcall'はすべてのVBAが知っているので不可欠です。 –

関連する問題