tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: Dll 内の関数を別の Dll を使って呼び出したい。
投稿日: 2014/07/08(Tue) 15:13
投稿者みゆき族
魔界の仮面弁士 様

お世話になります。みゆき族です。

早速にお返事いただきまして誠に有難うございます。
いつも貴殿の書き込みは参考にさせて頂いております。

>その要望が、どのような理由から発生したのか、
>事情をお聞かせ頂けないでしょうか。
私も先方が何がしたいのかよく分からなかったので(そんな二度手間をする必要あるのか疑問に思った)、質問したところ、DLL_Bを表に出したくないとの回答でした。カレントディレクトリやプロジェクトで使う DLL は DLL_A としてではなく、DLL_B として使いたとのことです。


>(1) AcitveX DLL である以上、Dll_B を作成する際に「クラスモジュール」を
> 用意していたと思います。そこに Public Function を追加し、そこに>
> DLL_A を呼び出すコードを記述して下さい。
クラスモジュールを以下のように書き換えたのですが、これで宜しいでしょうか?

Option Explicit

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "DLL_A" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal mParam As Long) As Long

Private Function Bar(var1 As Long, var2 As Long, var3 As Long, var4 As Long, var5 As Long)
On Error Resume Next
'We're going to call an API-function, without declaring it!
Dim lb As Long, pa As Long
'map 'user32' into the address space of the calling process.
lb = LoadLibrary("DLL_A")
'retrieve the address of 'SetWindowTextA'
pa = GetProcAddress(lb, "Foo")
'Call the SetWindowTextA-function
CallWindowProc pa, ByVal var1, ByVal var2, ByVal var3, ByVal var4, ByVal var5
'unmap the library's address
FreeLibrary lb
End Function


>(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
> のようにします。
こちらを試してみましたが、
「コンパイルエラー:メソッドまたはデータメンバが見つかりません。」
となり、やはり上手くいきません。

Dim o As Object
set o = CreateObject("Project1.Class1")
call o.bar()
set o = Nothing

こちらも試してみましたが、これも駄目でした。


お時間があるときで構いませんので、アドバイス頂けますと幸いです。

宜しくお願い致します。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。