人に聞けない痔の悩み、これでスッキリ >>

質問は2つあります。以下、よろしくお願いします。
1.通常DLLはレジストリに登録しなくても使用できますが、どういう場合に登録が必要なのでしょうか?

2.regsvr32 xxx.dll を実行したところ、以下のようなエラーとなってしまいました。正しく登録するにはどうしたらいいのでしょうか?

xxx.dll は読み込まれましたが、DllRegisterServer エントリポイントが見つかりませんでした。このファイルが登録されていない可能性があります。

以上、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

ちょっと違うかもしれないけど 大雑把にいうと



特定のソフトだけでなく他のソフトでも共通で使われるかもしれないモノは、登録が必要な事が多い

『エントリポイントが見つかりませんでした』ってことは、登録する必要がないってことです
    • good
    • 0
この回答へのお礼

ありがとうございます。

なるほど登録する必要がないのですね。
登録できるのは,
ActiveXのDLLということでしょうか?

お礼日時:2008/03/08 01:06

>これは「前者」になるのでしょうか?


そうなりますね
    • good
    • 0

DLLにはいくつか種類があって


ソフトが必要なときにそのつど自分でLOADして使う方法と
Windowsが起動したと同時にLOADされてメモリに常駐して
いつでも使うことのできるものがあります。
上記の理由でDLLの作り方が違うのでエントリポイントを持たないもの(前者)と持つもの(後者)があります。
※厳密にはそう簡単に括れないですが( ゜∀゜)
    • good
    • 0
この回答へのお礼

ありがとうございます。
問題のDLLは自分でつくったものですが、ソフト(アプリ)がインポートライブラリでリンクするものですが、これは「前者」になるのでしょうか?

お礼日時:2008/03/08 01:04

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qオブジェクト(dll)のレジストリ登録について

いつもお世話になっております。

dllの使い方について教えてください。

vb5.0で開発を進めているのですが、
dllを呼び出す際に、レジストリ登録を
しなければいけないのでしょうか?

いくつかのサイトでは、参照設定際すれば、
実行できているようです。。

実行環境では、レジストリ登録しないと
動かない場合があるということでしょうか?

ご教授、よろしくお願いします。

Aベストアンサー

何のDLLか、によるが。

・あなたがVB5.0で作成したDLLを、開発に使ったマシン以外で使う。
→該当するマシンでレジストリに登録する必要があります。

・あなたがVB5.0で開発を行うにあたり使用するDLLを開発に使ったマシン以外で使う。
→VB5.0で参照設定できるのであれば、それと同じ方法で該当するマシンにDLLをインストールすれば同様にレジストリに登録済みとなる事でしょう。

よくわかんなければ次のようにしてみれば良いだろう。コマンドプロンプトを開いて
C:\>regsvr32 hogehoge.dll
これで「Successful」と出ればActiveX DLLだ。エントリポイントが見つかりません云々と言われたらそれはWin32ネイティブDLLという事。登録に失敗して環境を壊すという事はないのでとりあえず登録を試みてみれば良いのではないかな。

現在では大きく分けてDLLは3つある。
・Win32ネイティブDLL:レジストリ登録不要。パスの通った所に配置する。
・ActiveX DLL:レジストリ情報によって呼び出すDLL。レジストリに登録する。インプロセスCOMサーバと言っても差し支えないかもしれないがあるかもしれない。
・Microsoft .Net アセンブリ:レジストリの登録は不要。単純に実行ファイルと同じパスに配置するか、.Netにおけるレジストリといえるグローバルアセンブリキャッシュに登録する。

何のDLLか、によるが。

・あなたがVB5.0で作成したDLLを、開発に使ったマシン以外で使う。
→該当するマシンでレジストリに登録する必要があります。

・あなたがVB5.0で開発を行うにあたり使用するDLLを開発に使ったマシン以外で使う。
→VB5.0で参照設定できるのであれば、それと同じ方法で該当するマシンにDLLをインストールすれば同様にレジストリに登録済みとなる事でしょう。

よくわかんなければ次のようにしてみれば良いだろう。コマンドプロンプトを開いて
C:\>regsvr32 hogehoge.dll
これで「S...続きを読む

QCOMコンポーネントって何?

よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。

Aベストアンサー

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出来るようになります。
それがクラスです。
その結果、プログラム中のデータや処理が、クラス単位で整理され、
それぞれ部品のように組み替えが可能になりました。

このように、クラス単位にプログラムを分割することで
巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。

また、クラスには親と子があり、「継承」という考えを用いて
どんどんバージョンアップや特化を行うことが容易です。

VBで説明すると、
Dim value as A
として変数を宣言した場合、クラスは「A」です。
valueはオブジェクトや、インスタンスと呼ばれます。
valueを使って、Aに含まれる関数を呼び出して、valueを
操作することが出来ます。
value.Init()
等。

ざっくり説明するとこんな感じです。
詳細については、各言語の書籍を参照してください。

このようにして作ったクラスを、
・他の言語から使いたい
・ネットワーク経由で使いたい
などと言った機能を実現する、Microsoft提供の方法の一つが、
COMやDCOMと呼ばれるものです。
COMは、他のプログラムからの使いまわしに強いので、
一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから
呼び出しが可能です。
また、COM自体のバージョンが上がっても、それを呼び出してる
プログラム自体には変更の必要がありません。

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出...続きを読む

Qregsvr32でActiveX登録を行ったocx

regsvr32 で ActiveX登録を行った ocx がリソースエデイタ「のActiveX コントロールの挿入」で使用できなくて困ってます。

開発環境は VisualStudio2005 の VC++ で、Version は 8.0.50727.867 になります。

レジストリエディタで確認すると以下のレジストリキーで登録されていることを確認できるのですが。

HKEY_CLASSES_ROOT\CLSID\{9BD4A8F2-56BA-11D3-915D-00C04F797034}

『ActiveX コントロール テスト コンテナ』の「コントロールの登録」ダイアログで表示される一覧中には含まれていません。
また、「コントロールの登録」ダイアログで「登録」ボタンを押しても一覧に追加も行われません

なんとなくセキュリティっぽい事までは分かるのですが、どなたかヒントをお持ちでしょうか?

Aベストアンサー

OSはWindows7でしょうか?
もしかしたらUAC(ユーザーアカウント制御)の設定が原因かもしれません。
ユーザーアカウント制御の設定を通知しないに設定後、パソコンを再起動して
再度レジストリ登録しても同じ現象でしょうか?

Qregsvr32で登録された一覧を知りたい

 よろしくお願いします。

 環境はwindowsXPsp1です。同名のdllやocxが複数フォルダにあり、どちらがregsvr32で登録されているかわかりません。regeditで一つ一つ調べていたのですが、精神的な限界に達しました。一覧でずばんとわかる方法は無いでしょうか。

 できればフリーソフトを使わずwindows機能だけでなんとか調べたいのですが・・・

Aベストアンサー

Oleviewは?
VisualStudio等についているツールです。
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/oleview-o.asp
#日本語の表示とDISPIDにバグがありますが。


ちなみに実は登録されてなくても使用されている可能性があるんですけど(^^;;;
Side By Sideって方法で。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconcomcomponentsside-by-sideexecution.asp

QVBScriptからDLL参照設定したい

初めて質問します。宜しくお願いします。

VBScriptからある業務アプリのAPIを操作したいと考えています。参照したいDLLは分かっているのですが参照設定の方法が分かりません。「Declare」など宣言することによって参照設定することは可能でしょうか。そもそもVBScriptからはDLLへの参照設定はできないのでしょうか。

ちなみにOSはWin2000サーバまたはWin2003サーバを想定しています。

以上、宜しくお願いします。

Aベストアンサー

出来ません。
http://msdn.microsoft.com/library/ja/script56/html/vsgrpNonFeatures.asp

ラッパー(ActiveX.DLL)をVB等で作るとか。

QDLLやOCXなどの格納先は必ず「C:\WINDOWS\system32」?

お世話になります。

早速ですが、アプリケーションを動かすのに必要とされる、DLLやOCXファイルをインストールする場合、Windows XPでは、全て例外が無く「C:\WINDOWS\system32」にコピーする、と考えて問題は無いでしょうか?

また、「C:\Windows\System32」は細かくサブフォルダがたくさん分かれていますが、迷わずにそのルート(最上層)に入れてかまわないのでしょうか?

どなたかお知恵を拝借したいのですが.....すでに質問があるのではないかと検索させていただきましたが、見つからなかったため新規に質問させていただきました。ご容赦ください。

◎パソコン環境
OS:Windows XP Home Edition SP1適用済み
メモリ:512MB
CPU:IntelPentium4(2.4Ghz)

よろしくお願い致します。

Aベストアンサー

おはようございます(^^

>迷わずにそのルート(最上層)に入れてかまわないのでしょうか?
そーです。基本的にそれでアタリです。

XpならWindows\system32。最上層です。私は直下と呼んでいます
9x系ならWindows\system
NT系ならWINNT\system32

アプリケーションのプログラムが起動時に必要なDLLを呼び出す
場所をさがすときには探す順番があって先ずはそのアプリを起動した
場所(フォルダ)から探します。
だから、EXEの入った同一フォルダにDLLがある場合もあるでしょ?

そこになきゃ↑のSystemフォルダを探しに行きます。

まあ よっぽど独自DLLでない限りとかインストールを必要としない
プログラムならEXEと一緒に同じフォルダに入れますが。
そんでアンインストール時にはフォルダごとポイっでオシマイ。

そーでないなら決まった場所におきます。
その代表がXpならWindows\system32です。
まあ お決まりってことで。

つまり 正解ってことです♪ 
ではでは。

おはようございます(^^

>迷わずにそのルート(最上層)に入れてかまわないのでしょうか?
そーです。基本的にそれでアタリです。

XpならWindows\system32。最上層です。私は直下と呼んでいます
9x系ならWindows\system
NT系ならWINNT\system32

アプリケーションのプログラムが起動時に必要なDLLを呼び出す
場所をさがすときには探す順番があって先ずはそのアプリを起動した
場所(フォルダ)から探します。
だから、EXEの入った同一フォルダにDLLがある場合もあるでしょ?

そこになきゃ↑のSystemフ...続きを読む

QVB6(SP5)+OO4OでCreateObjectが失敗する

上記の環境でプログラムを作成しています。
Windows2000ではうまくいきました。
WindowsXP(Professional)で失敗します。

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase(C_ORACLE_TNS, C_ORACLE_USER & "/" & C_ORACLE_PASS, 0)

のようなコーディングでCreateObjectのところで失敗しエラーとして429 ActiveX コンポーネントはオブジェクトを作成できません。
というのが発生します。

Oracleのバージョンは9iでそのクライアントパック9.2.0.1.0を管理者モードでインストールしています。
もちろんOO4Oはインストールされていますし、VBの参照設定でOracle InProc Server 4.0 Type Libraly を追加しています。

何度か再インストールなどしましたが全く同じです。何がいけないのでしょうか?直接回答でなくてもヒントでも何でも教えてください。

なおSQL Plusでテーブルの参照はできています。

上記の環境でプログラムを作成しています。
Windows2000ではうまくいきました。
WindowsXP(Professional)で失敗します。

Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase(C_ORACLE_TNS, C_ORACLE_USER & "/" & C_ORACLE_PASS, 0)

のようなコーディングでCreateObjectのところで失敗しエラーとして429 ActiveX コンポーネントはオブジェクトを作成できません。
というのが発生します。

Oracleのバージョンは9iでそのクライアントパッ...続きを読む

Aベストアンサー

通常は正しく削除されてしかるべきなのでしょうが、レジストリにキーが残った状態になることもありますので
・・・
完全削除についてはリリースノートにも記載されております。

Oracle9i Client for Windows インストレーション・ガイド リリース2 (9.2.0.1.0)(2002/8/7)
「オラクルコンポーネントのインストール」「oracleコンポーネントとサービスの削除」

参考URL:http://otn.oracle.co.jp/document/products/oracle9i/920/windows.html

QVB2008でのDLL作成方法について

はじめまして、はじめて投稿します。

初心者なので変な質問をしていたらすいません。VB2008を使用しています。

VBで作成したDLLファイルをLabviewで使用したいと思っています。
ただVB6.0でActiveX DLLを作成する方法はわかるのですが、VB2008で作成する方法がわかりません。
クラスライブラリでプログラムを作成し、DLLにすることはできるのです・
しかしレジストリに登録しようと思い「regsvr32 ファイルのパス**.dll」と入力したところ「**.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした」と出ます。

調べてもVB2008でのActiveX DLL作成方法が見つからなくて困っています!!!
わかるかた、よろしくお願いいたします。

Aベストアンサー

GENGUIDはVB2008のインストールフォルダーにあると思いますので
以下の手順でツールに登録してみましょう

ツール > 外部ツール > 追加(A)をクリック

タイトルに『GENGUID』
コマンドの右端の『...』ボタンをクリック
開いたダイアログのフォルダーを1階層上がってToolsを選択
ここに『GENGUID.EXE』があるのでこれを選択して『開く(またはOK)』
初期ディレクトリに コマンド部分の GENGUID.EXEの手前までをコピーして 貼り付け
OKをクリック

といった手順でいいでしょう

Q.NETでActiveXコントロールを使う

開発系初心者です。

ある事情にて.NETの環境でActiveXコントロールの使用を行うことになりました。
そこで、下記アドレスの方の方法を参考にさせていただいたのですが、
ラッパークラスライブラリの生成が行えません。

.NET環境でActiveXコントロールの実装を行うことに参考にさせていただいたサイト
http://blogs.wankuma.com/ganfield/archive/2007/03/13/66556.aspx

サイトに記載されているActiveXの登録には、下記のアドレスの方のを参考に、
regsvr32で登録済みとなっています。

ActiveX登録に参考にさせていただいたサイト
http://www3.ocn.ne.jp/~tonko/HP13_02.htm

二つのラッパーライブラリが生成できないというのは、コマンドプロンプトの作業時、
AxImp c:\WINDOWS\system32\msdxm.ocx
と、入力しても
AxImp エラー: タイプ ライブラリ/DLL の読み込みエラーです。(HRESULTからの例外:0x80029C4A (TYPE_E_CANTLOADLIBRARY))
と出てしまい、ラッパーライブラリが生成できません。上記サイト以外に、何か準備する必要があるのでしょうか?
なお、開発環境は、
OS     :Windows 7
開発環境 :Visual Studio 2010
です。プログラミング言語ではC#の使用を予定しています。

どなたかご回答をお願い致します。

開発系初心者です。

ある事情にて.NETの環境でActiveXコントロールの使用を行うことになりました。
そこで、下記アドレスの方の方法を参考にさせていただいたのですが、
ラッパークラスライブラリの生成が行えません。

.NET環境でActiveXコントロールの実装を行うことに参考にさせていただいたサイト
http://blogs.wankuma.com/ganfield/archive/2007/03/13/66556.aspx

サイトに記載されているActiveXの登録には、下記のアドレスの方のを参考に、
regsvr32で登録済みとなっています。

ActiveX登録に参考にさせ...続きを読む

Aベストアンサー

http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/a2a04bb7-8523-4b39-b3bc-a1e2b02b7aca/
で解決しているっぽい

QDLLをREGSVR32しないで利用する方法について。

こんにちは。
Visual Basic 6.0でActiveX DLLを作成しました。
REGSVR32で登録して正常に利用できていますが、
レジストリを使わないで動かしたいと思っています。

フリーソフトではレジストリを使わないで動かせるものがありますが、あのようにするにはどうすればよいのでしょうか。

基本的には、exeファイルとdllファイルを同じフォルダへ置いて動けば良いと思っています。

調べるとLoadLibraryを使えば出来そうに書かれていますが、ご存知の方アドバイスを宜しくお願い致します。

Aベストアンサー

>フリーソフトではレジストリを使わないで動かせるもの
おそらく、何らかのソフトにDLLが含まれていて、インストーラを起動せずに実行できたからだと思うのですが、、、

#1のtodo36さんの発言の延長でお話いたします。



逆にそのDLLを、REGSVR32で登録できますか?

・出来ない場合
ActiveX形式のDLLではありません。
CやVCで作成されたものだと思われます。
レジストリ登録しないで使用します。
VBでは「Declareステートメント」による引き込み、もしくは[API:LoadLibrary]と[API:GetProcAddress]


・出来る場合
ActiveX形式のDLLです。
VBやVCで作成されたものだと思われます。
レジストリ登録して使用します。
VBでは「CreateObject()」、もしくは[API:CoCreateInstance]

です。


もし、そのソフトがレジストリ登録できたのなら、こっそりレジストリに書き込んでいるのとしか思えません。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング