none
dllの使用に関して RRS feed

  • 質問

  • VB未熟者
    開発環境------------------------------------------------------------------------------

    使用言語 Visual Basic 2005 Express Edition
    OS             Windows XP HomeEdition Service Pack2
    -------------------------------------------------------------------------------------------

    午後のこ~だdll(gogo.dll)を使用してwav→mp3に変換するプログラムを作成しようとしています。
    作者サイト(http://www.marinecat.net/free/windows/mct_free.htm)に行き
    サンプルコード(http://www.marinecat.net/free/windows/gogohelp/vbgogo.txt)を
    入手して実行してみたのですが、うまくいきませんでした。
    サンプルコードがVB6?で書かれていたようなので、
    ツール→Visual Basic 6 コードのアップグレードを行い再び実行してみたのですが、下記のようなエラーが出てしまいました。

    'System.EntryPointNotFoundException' の初回例外が xxx.exe で発生しました。

    いろいろ調べてみたのですが、対処方法が分かりません。どのようにすればこのエラーを回避できるのでしょうか?ご教授ねがいます。

    自分でやってみたこと---------------------------------------------------------------------------
    ツール→Visual Basic 6 コードのアップグレードを行ってみました。
    bin/Debag/にgogo.dllをおいてみました。
    gogo.dllをソリューションエクスプローラに既存項目の追加で追加してみました。
    --------------------------------------------------------------------------------------------------------

    2006年9月13日 13:23

回答

  •  Hongliang さんからの引用

    MSDN の アンマネージ コードとの相互運用 という章には一通り目を通すべきでしょう。

    早速のご返答ありがとうございます。一度目を通してみたいとます。

     Hongliang さんからの引用

    オンラインマニュアルをざっと見たところ、外部公開している関数名にはいずれも VB というサフィクスは付いていないようですが、何故かサンプルには全部 Alias にて付けられてますね(Alias キーワードの後ろの文字列が、DLL が公開している関数名になるようにしなければなりません。自分で宣言した関数名がそのまま DLL の公開する関数名になるのなら不要ですが)。この辺が怪しいです。


    サンプルコードの
     Private Declare Function MPGE_initializeWork Lib "gogo.dll" Alias "MPGE_initializeWorkVB" () As Integer 

    を下記のようにのようにVBの部分をを削ったところ動作を確認できました。

     Private Declare Function MPGE_initializeWork Lib "gogo.dll" Alias "MPGE_initializeWork" () As Integer

    真に初歩的な質問をしてしまい申し訳ありませんでした。ご返答していただいた方々ありがとうございました。

    2006年9月13日 14:30

すべての返信

  • 諸農です。

     Yasu1980 さんからの引用

    サンプルコードがVB6?で書かれていたようなので、

    確かにサンプルのコードはVB6以前のコードだと思います。
    ですが、サンプルのコードはプロジェクト全体のコードではありません。要するにアプリケーションとしてビルドできない、部分的なコードです。

     Yasu1980 さんからの引用

    ツール→Visual Basic 6 コードのアップグレードを行い再び実行してみたのですが、下記のようなエラーが出てしまいました。

    'System.EntryPointNotFoundException' の初回例外が xxx.exe で発生しました。

    サイトで入手できるサンプルコードは午後のコーダDLLを使えるようにするための宣言部と、ボタンクリックしたときに宣言したDLLのAPI関数を呼び出すだけのサンプルですので、上記のエラーが出て当たり前です。


    いろいろ調べてみたのですが、対処方法が分かりません。どのようにすればこのエラーを回避できるのでしょうか?ご教授ねがいます。

    一番簡単な方法は次のやり方だと思います。

    1.新規でWindowsFormアプリケーションプロジェクトを作成する。
    2.フォームにボタンを配置する
    3.配置したボタンをダブルクリックする
    4.コードエディタに切り替わるので、「Class Form1」から「Private Sub」の間にDLL宣言と変数・定数宣言を配置する。
    5.Button1_Clickイベントにボタンクリックの処理を転記する
    6.数カ所コンパイルエラーが出るので、VB2005に付属のMSDNドキュメントでVB6以前との差違を調べてコンパイルできるように修正する

     

    2006年9月13日 13:57
  • DllNotFoundException じゃないってことは DLL が見つかってないわけではないですね。

    この例外は指定された関数名が DLL の中に見つからない時に投げられる物です。

    オンラインマニュアルをざっと見たところ、外部公開している関数名にはいずれも VB というサフィクスは付いていないようですが、何故かサンプルには全部 Alias にて付けられてますね(Alias キーワードの後ろの文字列が、DLL が公開している関数名になるようにしなければなりません。自分で宣言した関数名がそのまま DLL の公開する関数名になるのなら不要ですが)。この辺が怪しいです。

    しかし、そこにあるサンプルをそのまま(しかもアップグレードで)使うというのは大変不安です。多少分量はありますが、MSDN の アンマネージ コードとの相互運用 という章には一通り目を通すべきでしょう。

    2006年9月13日 14:07
  • 早速のご返答ありがとうございます。早速試してみます。
    2006年9月13日 14:14
  •  Hongliang さんからの引用

    MSDN の アンマネージ コードとの相互運用 という章には一通り目を通すべきでしょう。

    早速のご返答ありがとうございます。一度目を通してみたいとます。

     Hongliang さんからの引用

    オンラインマニュアルをざっと見たところ、外部公開している関数名にはいずれも VB というサフィクスは付いていないようですが、何故かサンプルには全部 Alias にて付けられてますね(Alias キーワードの後ろの文字列が、DLL が公開している関数名になるようにしなければなりません。自分で宣言した関数名がそのまま DLL の公開する関数名になるのなら不要ですが)。この辺が怪しいです。


    サンプルコードの
     Private Declare Function MPGE_initializeWork Lib "gogo.dll" Alias "MPGE_initializeWorkVB" () As Integer 

    を下記のようにのようにVBの部分をを削ったところ動作を確認できました。

     Private Declare Function MPGE_initializeWork Lib "gogo.dll" Alias "MPGE_initializeWork" () As Integer

    真に初歩的な質問をしてしまい申し訳ありませんでした。ご返答していただいた方々ありがとうございました。

    2006年9月13日 14:30