VC++で作成したDLLをVBで使用しています.
今はdefファイルを使わずにDLLを作成し,VBでAliasを使って使用しています.
標準モジュールに
Declare Function sum Lib "dllmake.dll" Alias "_sum@8" (ByVal a As Long, ByVal b As Long) As Long
のような感じで書いています.これをAliasをなくして,
Declare Function sum Lib "dllmake.dll" (ByVal a As Long, ByVal b As Long) As Long
のような形で使用したいのですが,可能でしょうか.
また,DLLを作成時にdefファイルを使用すると下のやり方でも可能でした.
defファイルもAliasも使わずにDLLを使用することは可能なのでしょうか.
たぶん無理。
追記)
それができればdefファイルの意味ないですから。
ちなみに Alias を使うけど"エントリポイントの序数"を指定する方法もある。
結局いくつになっているのかDependency Walker等で確認する必要があるけど。
詳しくはDeclareをMSDNで調べてください。
これもつかえないなら、
・なんでdefファイルを使えないのか
・なんで Alias を使えないのか
というのを明確にしてください。
>たぶん無理。
調べてみたところ
一応 VC 同様 LoadLibrary + GetProcAddress で
対象の関数のアドレスを取得して実行できるには出来るらしい。
http://nienie.com/~masapico/doc_FuncPtr.html
ただ、こんなめんどくさいことやるのであれば素直にdefファイルやAliasを
使うべきでしょう。
個人的に気になるので、1つ上のレスの質問には回答してほしいです。
(前回のdefファイルを使わないでDLLを使う方法のスレ(VB掲示板)でも回答もらっていないですし。)
こちらをご参照下さい。
厳密には、.defを使わないでも可能です。
以上。
>オショウさん
ちょっと理解できません。
こうすることで「VB」からAlia指定なしでDLL内の関数が使えるのでしょうか?
> ・なんでdefファイルを使えないのか
> ・なんで Alias を使えないのか
defファイルもAliasも使わずにDLLの作成ができると便利だと思ったんですが、自分でもいろいろ調べたのですが、やはり無理そうです。
Blueさん、ありがとうございます。
難しいことはせずに、defファイルを使用します。
オショウさんのやり方はちょっとぼくには理解できないです。
そのやり方だと、Dependency Walker等で確認する必要があると思うのですが。
ぼくの最初の言い方がまずかったと思うのですが、Aliasを使わずにというよりかは、ファンクション名だけで実行可能かという質問でした。
次回からはもっと詳しく書くようにします。
調べてもらったのにすみません。
Blueさん、オショウさん、ありがとうございました。
ツイート | ![]() |