OCXのレジストリ登録を行うには?

[戻る]
ガウェイン・七海 2001/06/26(火) 11:05:58
こんにちは。

現在あるOCXをVC++6.0で作成しているのですが、ひとつ完成
した後に、ほとんど同じ機能で画面表示だけが少しだけ違う
ものを作成する必要があり、元のプロジェクトのファイルを
全てコピーして、ファイルのリネームを行い、grepを使って
プロジェクト固有の文字を書き換えました。

例)
AAA.DSW, AAACtl.CPP...AAA.OCX
↓↓↓
BBB.DSW, BBBCtl.CPP...BBB.OCX

それで各々は問題なく動いているのですが、レジストリに
両方同時に登録することができなくなってしまいました。

どちらか片方を登録すると、もう片方がOCXの登録一覧から
消えてしまい、両方同時に使用することができません。

OCXのコア(?)のようなものが重複したコードになっていて、
名前/実態は違うけど同一のOCXとみなされているのかな、
と思ったのですが、どこを変更すれば良いのかわかりません...

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

Bun@自宅 2001/06/27(水) 01:34:22
ガウェイン・七海様
こんばんは。

OCXって、ActivXのことでしょうか?

ちょっとつくったことがないので、”超”自信がありません。
レジストリに関わる部分なので、バックアップをとるなど十分注意してください。
なお、本件により不具合が発生しても、当方は責任をとれませんので、ご了解ください。(逃)
(最悪の場合、いっぱいごちそうする とかそーいうレベルでは無くなるかも知れません(笑))

さて、本題です。
えっ、ActiveXではない?じゃー、わかりませんです。m(__)m

書き換えは自動で行われたのでしょうかね?
まあ、実際私も(やったことがないので)ヒントくらいしか提供できませんが。

==ここではプロジェクト名を Actxとしています==

if (Project == MFC ActiveX Controlwizard){
 ActxCtl.cppのファイルを見てください。
 下記のコードがあると思います。

/////////////////////////////////////////////////////////////////////////////
// クラス ファクトリと guid を初期化します

IMPLEMENT_OLECREATE_EX(CActxCtrl, "ACTX.ActxCtrl.1",
    0x8eff027, 0x6a83, 0x11d5, 0x80, 0xe2, 0xea, 0x85, 0x3f, 0x97, 0xc5, 0x3b)


/////////////////////////////////////////////////////////////////////////////
// タイプ ライブラリ ID とバージョン

IMPLEMENT_OLETYPELIB(CActxCtrl, _tlid, _wVerMajor, _wVerMinor)


/////////////////////////////////////////////////////////////////////////////
// インターフェイス ID

const IID BASED_CODE IID_DActx =
        { 0xb6022ee4, 0x6a97, 0x11d5, { 0x80, 0xe2, 0x98, 0x8e, 0xe1, 0x52, 0x2b, 0x3b } };
const IID BASED_CODE IID_DActxEvents =
        { 0xb6022ee5, 0x6a97, 0x11d5, { 0x80, 0xe2, 0x98, 0x8e, 0xe1, 0x52, 0x2b, 0x3b } };

 こんなのがありますから、多分このあたりを操作すればレジストリは変更されると思います。
 ある本には、これらが登録されるレジストリ情報に等しいと書いてあります。
 どういじくったらよいかはわかりません。十分吟味して、実験してください。
 あと、MSDNのテクニカルノート64も読んでおいたほうが良いと思います。
 (先にも述べましたが、上記のコードはプロジェクトサンプルをActxとして生成されたものです。)

} else {
 わかりまへんm(__)m
}

それから、マルチポストはできるだけしないように心がけてください。
「別で投稿したけどレスがつかないので」とか書くようにするのがエチケットだそうです。
(私も気をつけますけど(汗))

ガウェイン・七海 2001/06/27(水) 14:42:55
[[解決]]
いつもレスありがとうございます。

そうです、ActiveXのことです。
ですので、指摘していただいたGUID、uuid関連を
修正したところ、解決致しました。

他の方に教えて頂いたのですが、GUIDGEN.EXEという
VC付属(Windows付属かも)のツールでグローバルに
一意で'あろう'IDを生成して、置き換えました。
(タイムスタンプから一意性の高いものを作成して
いるようです)

マルチポストに関しては大変申し訳ないです。
切羽詰っていたので、ついやってしまいました。
いつも色々丁寧に指摘して頂いて、申し訳ないですm(_ _)m
以後気をつけます。

古いスレッドには追加発言できません。