トップ回答者
dllの使用に関して

質問
-
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をソリューションエクスプローラに既存項目の追加で追加してみました。
--------------------------------------------------------------------------------------------------------
回答
-
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
真に初歩的な質問をしてしまい申し訳ありませんでした。ご返答していただいた方々ありがとうございました。
すべての返信
-
諸農です。
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以前との差違を調べてコンパイルできるように修正する -
DllNotFoundException じゃないってことは DLL が見つかってないわけではないですね。
この例外は指定された関数名が DLL の中に見つからない時に投げられる物です。
オンラインマニュアルをざっと見たところ、外部公開している関数名にはいずれも VB というサフィクスは付いていないようですが、何故かサンプルには全部 Alias にて付けられてますね(Alias キーワードの後ろの文字列が、DLL が公開している関数名になるようにしなければなりません。自分で宣言した関数名がそのまま DLL の公開する関数名になるのなら不要ですが)。この辺が怪しいです。
しかし、そこにあるサンプルをそのまま(しかもアップグレードで)使うというのは大変不安です。多少分量はありますが、MSDN の アンマネージ コードとの相互運用 という章には一通り目を通すべきでしょう。
-
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
真に初歩的な質問をしてしまい申し訳ありませんでした。ご返答していただいた方々ありがとうございました。