2012年5月7日月曜日

Regsvr32で登録したDllを、VBで宣言するには?


Regsvr32で登録したDllを、VBで宣言するには? [戻る]
SORASA 2009/09/07(月) 14:59:02
基本的な質問です。
開発環境:
OS:Windows XP Pro SP2
IDE:VB6.0

Regsvr32で登録したDllを、VB内でDeclare宣言してから、使いたいと思うのですが、どう記載してよいのか分りません。(場所とか)
下の"********"部分をどう書いてよいのか分りません。

Declare Function Lib "********" (ByVal ‾‾‾‾) As Integer

基本的なことで申し訳ございませんが、教えて下さい。


魔界の仮面弁士 2009/09/07(月) 15:23:33
何故、そのような事をしたいのでしょうか?

ActiveX DLL のメソッドは、外部関数として公開された物では無いため、
Declare で宣言して使う事は出来ません。
素直に、参照設定(またはレイトバインド)で呼び出しましょう。

世の中には、参照設定からでも Declare からでも使えるよう、
両対応に設計されたライブラリ(例: basp21.dll)もありますが、
そもそも VB6 製の ActiveX DLL の場合、Declare 用に公開される関数は、
 DllCanUnloadNow
 DllGetClassObject
 DllRegisterServer
 DllUnregisterServer
のみであり、それぞれのメソッドを Declare で呼べるような構造にはなっていません。


EBOOT.PBPを実行する方法

# undocumented な方法として、リンカオプションを指定して無理やり外部公開するとか、
# oleaut32.dll の低レベルAPIで IUnknown ポインタを直接操作するといった
# ひどく遠回りな方法もありますが、そうまでして Declare に拘っても、あまり意味は無いでしょう。


SORASA 2009/09/07(月) 15:41:55
魔界の仮面弁士 様

ご回答有難うございます。
しかし、参照設定にそれらしきものが無いので、困っています。

RegEditで登録されているか確認すると、

HKEY_CLASSES_ROOT¥CLSIDの下、
[InProcServer32]にDllのフルパスが格納されており、
[ProgID]のデータ領域にタイプIDが格納されています。

故にこれをDeclareすればよいのかなと思っていたのですが、違いますか?


魔界の仮面弁士 2009/09/07(月) 16:35:56
> しかし、参照設定にそれらしきものが無いので、困っています。
[プロジェクト(P)]-[参照設定(N)...]メニューのダイアログを開き、
[参照(B)...]ボタンを押して、対象を選んでください。

> 違いますか?
違います。


SORASA 2009/09/07(月) 17:02:05
魔界の仮面弁士 様

ご回答有難うございます。

>[プロジェクト(P)]-[参照設定(N)...]メニューのダイアログを開き、
>[参照(B)...]ボタンを押して、対象を選んでください。

既にしましたが、参照で追加できません。
→ファイルにアクセスできて、有効なアセンブリであること、またはCOMコンポーネントであることを確認して下さい・・・と出ます。


お使いのコンピュータ上でPowerPointを置く方法

対象のDLLファイルを、右クリック-プロパティでみると、「OLESelfRegister」という項目があります。
ひょっとして、Regsvr32で既にレジストリ[HKEY_CLASSES_ROOT]以下に登録されてあるので、「参照設定」とかしなくとも本来実行できるはずなのですか?

参照設定できないことが問題なのか、レジストリの[HKEY_CLASSES_ROOT]以下に登録されてあるにも関わらず、CreateObjectを実行しても、「ファイルリソースが見つかりません」とリソース先を見つけられないことが問題なのか、この切り分けで困っています。


魔界の仮面弁士 2009/09/07(月) 18:39:46
…… VB6 の IDE で、そんなメッセージ出ましたっけ?

参照設定できないファイルを設定した場合のメッセージは、
 VB6『指定されたファイルへの参照は登録できません。』
だったかと思います。

これが Visual Basic .NET 系の IDE であれば、
 VB8『ファイルにアクセスできて、有効なアセンブリであること、または COM コンポーネントであることを確認してください。』
 VB9『ファイルがアクセス可能で、有効なアセンブリまたは COM コンポーネントであることを確認してください。』
というメッセージになりますが―――それにしても、SORASAさんが遭遇したという
 VB?『ファイルにアクセスできて、有効なアセンブリであること、またはCOMコンポーネントであることを確認して下さい』
のメッ セージとは微妙に異なっていますね(少なくとも私は、そのエラーを見たことがありません)。


dllファイルを再インストールする方法

> 対象のDLLファイルを、右クリック-プロパティでみると、「OLESelfRegister」という項目があります。
"OLESelfRegister" が無くても 参照設定できる DLL は多いので、それだけでは
ActiveX DLL であると決め付けるわけには行きませんが、VB6 製の DLL であれば、
その項目名が入りますから、それが ActiveX DLL である可能性は高そうですね。
(最初の質問からして、Regsvr32 自体は正常に登録されているのでしょうし)

その DLL は、どのようにして作成したもの(もしくは入手したもの)なのでしょうか?

> 参照設定できないことが問題なのか、
DLL だけではなく、その DLL の依存コンポーネントが揃っているかど� ��か、
DLL の提供元に問い合わせてみてください。依存ランタイムやライセンスファイル等が
不足しているのかも知れませんし。

また、それらの DLL の素性を明らかにするために、
OLE/COM オブジェクトビューワ(OLEVIEW.EXE)で タイプライブラリ情報を参照したり、
Dependency Walker (DEPENDS.EXE) で、外部公開関数の一覧などを調べてみるのも良いかも。

> レジストリの[HKEY_CLASSES_ROOT]以下に登録されてあるにも関わらず、CreateObjectを実行しても、
レジストリには、他にどのように登録されていますか? 少なくとも、
>>> HKEY_CLASSES_ROOT¥CLSIDの下、
>>> [InProcServer32]にDllのフルパスが格納されており、
>>> [ProgID]のデータ領域にタイプIDが格納されています。
だけでは、登録情 報が足らないように思えます。


> CreateObjectを実行しても、「ファイルリソースが見つかりません」と
> リソース先を見つけられないことが問題なのか、この切り分けで困っています。
このメッセージも、私は見たことがありません…。
 『ファイルリソースが見つかりません』
ではなく、
 『必要なリソースが見つかりません。』
 『リソースが見つかりませんでした。』
などであれば、幾度か目にしているのですが、これらは CreateObject のタイミングで
発生するものではありませんでした。

CreateObject を失敗した時に出るメッセージとして、私が見た事があるのは、
 『ActiveX コンポーネントはオブジェクトを作成できません。』

 『オートメーション � ��ラーです。
  指定されたモジュールが見つかりません。』
などですね。いずれも、コンポーネントのセットアップに失敗しているか、または
CreateObject するための権限が不足していた場合のものでした。


追加発言(4ヶ月以上古い記事に書き込めません。)



These are our most popular posts:

方法: Visual Studio で参照を追加または削除する

[プロジェクト] には、ローカル プロジェクトで作成されたすべての再利用可能な コンポーネントの一覧が示されます。 [参照] ... 内部マニフェストが含まれている登録 済みの COM DLL に参照を追加する場合、その DLL の登録をまず解除してください。 この操作を ... read more

Klearn morelackBerry Enterprise Server で CDO.dll ファイルの登録 ...

BlackBerry Enterprise Server で CDO.dll ファイルの登録状況と場所を確認する方法. 記事 ID: KB04912 (英語版) ... CDO.dll ファイルが BlackBerry Enterprise Server に 登録されていることを確認するには、次の手順に従います。 [スタート] [ファイル名を ... read more

VB.netのDLL参照について - VB業務アプリケーション開発研究室 - @IT

YAMASOUです。 testAtenpt.dll というDLLを参照する際に ソリューションの参照だと ビルドする際に レジストリ登録されてしまうとお聞きしました。 レジストリ登録をせずに DLLを参照する方法はありますでしょうか? 環境はVb.net 2003です。 read more

Xl 2000: Dll が登録されているを確認する方法

2011年7月21日 ... Microsoft Excel では、プログラムから Excel に登録する機能を提供するダイナミック リンク ライブラリ (DLL や XLL) ファイルを表示できます。 この資料では Microsoft Excel で、1 列目、DLL またはコード リソースの名前を表示、3 列の配列の ... read more

Related Posts



0 コメント:

コメントを投稿