タイトル : Re: Dll 内の関数を別の Dll を使って呼び出したい。 投稿日 : 2014/07/08(Tue) 11:07 投稿者 : 魔界の仮面弁士
> ここで、別の Dll を介して Dll_A を呼び出したいという要望を受け その要望が、どのような理由から発生したのか、事情をお聞かせ頂けないでしょうか。 「DLL」にも種類があります。目的としている理由如何では、今回みゆき族さんが 選択された DLL 利用法とは、別の道(注1)を模索するという選択肢もありえるかも知れません。 > ある Dll( Dll_A とします) 内にある関数( foo とします)を別の Dll( Dll_B とします) から呼び出したいのですが、どうすれば宜しいでしょうか? > VB6 の ActiveX Dll から Dll_B を作成しました。 AcitveX DLL で作成された DLL は、関数公開型のものではないため、 基本的には(注2)、Declare ステートメントで利用することはできません。 DLL_A 側で「DLL_B を『参照設定』する」ことで利用できるようになります。 (1) AcitveX DLL である以上、Dll_B を作成する際に「クラスモジュール」を 用意していたと思います。そこに Public Function を追加し、そこに DLL_A を呼び出すコードを記述して下さい。 (2) 作成した DLL_B を、EXE 側から「参照設定」してください。 EXE から DLL_B のコードを利用するために、 Dim o As Class1 Set o = New Class1 ret = o.Foo(val1, val2, val3, val5, val6) Set o = Nothing のようにします。 (注1) たとえば、.local あるいは manifest によって、AcitveX DLL を side-by-side で 呼び出すといった方法があります。 http://msdn.microsoft.com/ja-jp/library/ms811694.aspx http://msdn.microsoft.com/ja-jp/library/ms811700.aspx http://msdn.microsoft.com/ja-jp/library/cc482775.aspx (注2) 関数を無理矢理公開する方法もあるにはあるのですが、undocumented な手法でありお奨めしません。 http://www1.koalanet.ne.jp/akiya/vbindeep/index.html#option2 |