タイトル : Re^3: Dll 内の関数を別の Dll を使って呼び出したい。 投稿日 : 2014/07/08(Tue) 15:34 投稿者 : 魔界の仮面弁士
> DLL_Bを表に出したくないとの回答でした。 ??? であれば、そもそも DLL_B など作らず、最初の DLL_A をそのまま使えば良いような…。 かといって、DLL_A を表に出したくない、という意味だとしても、 DLL_A を必要とすることには変わりないので、まだ意図が分からないです。 > カレントディレクトリやプロジェクトで使う DLL は > DLL_A としてではなく、DLL_B として使いたとのことです。 その発言だけ聞くと、DLL_A をリネームして、DLL_B という名前で配置しておけば 解決するような気もしますが、そういう話ではないのですね? 今回選択した「DLL_B という ActiveX DLL で中継する」という手法は、 DLL_A を直接 Declare する場合に比べて、状況が悪化する可能性も考えられますが、 本当にその手法で問題が無いか、発注者に確認されていますでしょうか。 ・参照設定することで、VB 以外(スクリプト等)からも呼びやすくなる。 →「表に出したくない」というが、むしろ、公開度が上がる結果となる。 ・ActiveX DLL 化することで、システム登録が必須となる。また、バイナリ互換性の維持も重要となる。 →「別の DLL として使いたい」という理由の如何によっては、管理の煩雑度を増す結果となる。 > > 「クラスモジュール」を用意していたと思います。 > > そこに Public Function を追加し、 > クラスモジュールを以下のように書き換えたのですが、これで宜しいでしょうか? で、肝心の『Public Function』はどこでしょうか? > 「コンパイルエラー:メソッドまたはデータメンバが見つかりません。」 > となり、やはり上手くいきません。 .Foo というのは仮の名前です。実際には、参照設定した自作 DLL の Class1 に作成した「Public Function」の名前と一致させて下さい。 > set o = CreateObject("Project1.Class1") > call o.bar() > こちらも試してみましたが、これも駄目でした。 CreateObject で失敗するのであれば、プログラムIDが間違っているか、 もしくは DLL の登録に失敗しているかのいずれかです。 bar メソッドの呼び出しで失敗するのであれば、メソッド名や引数が間違っているか、 Public Sub bar() または Public Function bar() を実装し忘れているかのいずれかです。 |