[リストへもどる]
一括表示

投稿時間:2003/07/24(Thu) 23:59
投稿者名:海路
Eメール:
URL :
タイトル:
ActiveX DLLで作成したDLLについて
突然の書き込みで申し訳ありません。
ActiveX DLLでdllファイルを作成し、そのファイルを別プロジェクト(標準EXE)で
利用しようとしておりますが、実行すると「エントリがdllファイル内に見つからない」という
エラーが出力されてしまいます。

全くの駆け出し状態で恥かしい限りですが、ソースコードは以下の通りです。

@標準EXEのフォームモジュール
Private Sub Command1_Click()
   dim iDummy as Integer
    iDummy = fncSum(5,3)
    MsgBox iDummy
End Sub

A標準EXEの標準モジュール
Option Explicit
Public Declare Function fncSum Lib "dummy.dll" _
(ByVal a As Integer, ByVal b As Integer) As Integer

BActiveX Dllのクラスモジュール
Option Explicit
Public Function fncSum(a As Integer, b As Integer) As Integer
    fncSum = a + b
End Function

ActiveX DLLで作成したDLLは、Declareキーワードは使えないのでしょうか。
標準EXEでオブジェクトクラスのインスタンスを作成し、参照したときは
うまくいくんですが・・・。

環境はWindows98SE, VB6.0 Professional Edisionです。
dllの参照設定もしております。
作成したdllは、「dummy.dll」です。

また、dllファイルを何度か同名で更新し、作成していたところ、
参照設定内のファイルリストに同名のファイルが複数出来ている、
という事が起きていたのですが、一つだけの状態に戻すには、
どのような方法がありますでしょうか。

突然の書き込みで大変恐縮ですが、ご教授いただければ幸いです。
何卒よろしくお願いいたします。

投稿時間:2003/07/25(Fri) 01:41
投稿者名:Say
Eメール:
URL :
タイトル:
Re: ActiveX DLLで作成したDLLについて
「ActiveXDLL」 と 「DLL」 は別物です。
前者は簡単に言えば「クラス + インターフェイス」です。
レジストリに登録し、参照設定またはCreateObjectし、
インスタンスを生成して使います。

後者は関数の集まりです。APIがこの形式をとっています。
Declare宣言して使います。

VBでは前者を作ることはできますが、後者を作ることはできません。
通常、後者はVC++などで作ります。


なお、開発の過程で生じた不要なActiveXはレジストリから削除してください。

投稿時間:2003/07/25(Fri) 01:43
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: ActiveX DLLで作成したDLLについて
> ActiveX DLLで作成したDLLは、Declareキーワードは使えないのでしょうか。
使えません。VB6製DLLは、Declareで宣言して使えるようにはできていません。
(ある特殊な方法を使えばDeclare可能なDLLも作れますが、止めた方が良いでしょう)

> 標準EXEでオブジェクトクラスのインスタンスを作成し、参照したときは
> うまくいくんですが・・・。
それが正しい使い方です。その方法で使ってください。(^^;

ActiveX DLLを利用するには、『参照設定』してクラスをNewするか、
あるいはCreateObjectを呼び出すかしてクラスのインスタンスを生成し、
そのPublicメソッドを呼び出して利用する事になります。

> また、dllファイルを何度か同名で更新し、作成していたところ、
作成したDLLが残っているなら、コマンドラインから、
   REGSVR32 /U C:\Project1.DLL
を実行すればOKです。

もし、DLLを削除してしまった(もしくは上書きしてしまった)場合は、
レジストリ項目を手動で削除するしかありません。

投稿時間:2003/07/25(Fri) 23:50
投稿者名:海路
Eメール:
URL :
タイトル:
ありがとうございました。
ありがとうございました。
ActiveXのDLLとAPIのDLLは、また別物なのですね。
勉強になりました。

不要なActiveXの削除に関しては、頂きました回答より判断する限り、
手動で行うことになりそうで、どうやらレジストリの理解および
レジストリ項目の保存場所を探す作業より始める必要があるので、
もう少し時間を要しますが、期待以上の回答を頂きまして、
感謝しております。

また分からない事があればお伺いする事もあるかと思いますが、
何卒、よろしくお願いいたします。