ページ 1 / 1
DLLの関数呼び出しについて
Posted: 2006年4月03日(月) 16:25
by grew
不勉強で誠に申し訳ないんですが、
「const char *関数名(void);」
で表される関数はどういったふうに取り扱えばいいのでしょうか?
「Declare Function 関数名 Lib "ライブラリ名" () As BytePtr」
で試してみましたが、"関数名" が参照できません のエラーが出てしまい、
*関数名 で試したら、文法間違いのエラーが出てしまいました。
C言語の知識はほとんど無く、DLLの勉強も最近始めたばかりなのですが、よろしくお願いします。
Re: DLLの関数呼び出しについて
Posted: 2006年4月04日(火) 15:36
by ノッチ
C言語はなんとなくわかる程度なので間違ってるかもしれませんが、
const char *TestFunc(void);
というのはTestFuncという関数は引数と取らない(ABではTestFunc()と呼び出す)。
戻り値はキャラクタへのポインタ(ABではBytePtrの戻り値)
ということです。
ですので
Declare Function 関数名 Lib "ライブラリ名" () As BytePtr
と言う宣言は正しいと思うのですが、
関数名" が参照できません のエラーが出てしまい、
となるということはその関数名をExportしていない可能性があります。
情報が何もないので予想ですが、Ansi版とUnicode版があって
"関数名A"や"関数名W"のように呼び出すのかもしれません。
"ライブラリ名"の後にAlias "関数名A"を付けるともしかしたら動くかも。
C言語の解釈間違ってたらフォロー宜しくです。
Re: DLLの関数呼び出しについて
Posted: 2006年4月04日(火) 15:45
by 7
> 「const char *関数名(void);」
> で表される関数はどういったふうに取り扱えばいいのでしょうか?
関数名に*が付いてるってことはC++言語(C?)でしょうかね。
やったことがないので分かりませんが、LoadLibrary()とGetProcAddress()関数を使えばいいんじゃないでしょうか。
コード: 全て選択
Dim hModule As HINSTANCE
Dim hoge As *Function() As *Char
hModule=LoadLibrary("hoge.dll")
hoge=GetProcAddress(hModule,"関数名")
hoge()'ポインタを使って関数を実行します
FreeLibrary(hModule)
Re: DLLの関数呼び出しについて
Posted: 2006年4月05日(水) 00:38
by grew
最後の手段としてDLLをバイナリエディタで開いてみたのですが、
どうも付属テキストと書いてあることが違うようで、
違和感を覚えて最新のもの(テキスト含め)をダウンロードしたら、
どうやらバージョンアップに伴う仕様変更のようでした。
新しいテキストに沿って記述すると、何の問題もなく呼び出すことが出来ました。
お騒がせして本当に申し訳ないです。すみませんでした。
ご回答ありがとうございました。