アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、honiyonです。

 .NETでOCXを使用する場合に生成する必要があるPIAについて質問します。
 例えば、各利用者が各々作成した場合だと、同じOCXを利用するのにPIAの型定義には互換性がないよ、という所までは理解出来ました。
 AさんとBさんは同じOCXを使用したプログラムを作ったのに、AさんはBさんが作成したPIAを利用してOCXを参照する事は出来ない、と解釈しています。

 しかし、

http://www.microsoft.com/japan/msdn/net/general/ …

 ここで紹介されている「PIA を使用しなかった場合にはどうなるか?」がイマイチ理解出来ません。
 同じOCXでも、それぞれ異なるPIAを使用する為、Aさん作のアプリケーションと、Bさん作のアプリケーションが1台のパソコンに共存できない、という事でしょうか?

 アドバイス頂ければ幸いです。
 宜しくお願いします(..

A 回答 (2件)

honiyonさん、おはようございます。



MSの文書をあさっています。試していませんので外していたらすみません。

.NET からの COM コンポーネントの呼び出し
http://www.microsoft.com/japan/msdn/net/upgrade/ …

上の文書の「TLBIMP と直接参照のどちらを選択するか」の箇所に「特定の名前を付けて特定の位置に~」という記述があります。この箇所だけに注目すると、最悪、同じ名前で上書きしてしまうことが起こりえるのかな、と。

実際には同じ名前は作れない、インストールで必ず別のディレクトリになる、のでしたら、共有できないだけで動かなくなることはないような気もします。

Programming with Primary Interop Assemblies
http://msdn2.microsoft.com/en-us/library/baxfads …

type incompatibility problemという言葉があり、やはり何かまずいことがあるように思えます。

この回答への補足

こんにちは、honiyonです。

 熟読した感想を書こうと考えていましたが、年末も迫り時間がとりにくくなってしまいました...。
 受付中にしっぱなしも申し訳ないので、一旦締め切りたいと思います。

 お付き合い頂き有難う御座いましたm(_ _)m

補足日時:2006/12/25 11:06
    • good
    • 0
この回答へのお礼

こんにちは、honiyonです。

 2回目のご回答有難う御座いますm(_ _)m
 ご提示いただいたページを早速読んでみました。

 まだ熟読している最中ですが、型の不一致となる事は間違いなさそうですが、それがどんな時に起こりえるのかがポイントですね。

 ためしに2台のPCで、同一OCXに対して別々にラッパーを作ってみました。(2つのプロジェクトを作成)
 参考URLでいうところの直接参照で行いました。私はOCXをツールバーに取り込んでみました。
 100%忠実ではないですが、この場合でもプロジェクトのBIN/DebugとBIN/ReleaseフォルダにラッパーDLLが自動生成されました。

 そして更に別に用意した、2005Expressがインストールされていない環境で2つのプロジェクトを同時に起動してみました。それぞれ自分だけのラッパー(IA)でCOMを参照しているはずです。

 そしてそれぞれ問題なく動作しました。
 特に互換性による障害は認められません。

 つまり、Microsoftの言う互換性問題とは、A社がIA、B社がPIAでソフトウエアを開発した時、同じOCXだからといってA社のIAでB社のソフトウエアは動かせませんよ、という事が言いたいのかな、という形で私の中でまとまりつつあります。

 引き続き参考ページを熟読します。
 有難う御座いました。

お礼日時:2006/12/12 16:48

honiyonさん、おはようございます。



また勉強させて貰っています。私はご紹介頂いたページの文章から下記のように解釈しました。外していたらすみません。

●プライマリ相互運用アセンブリPIAはCOM発行者が定義したオフィシャルな相互運用アセンブリである。発行者によって提供されたものでない相互運用アセンブリは非オフィシャルなものと見なし、使用を避けるべきである。それはPIAとは呼ばず、代替相互運用アセンブリと呼ぶ(?)。

ですから、同じOCXを利用するために「PIAを」各利用者が各々作成することはあり得ないと思います。利用者が生成したものは非オフィシャルな相互運用アセンブリです。

「PIA を使用しなかった場合にはどうなるか?」の箇所は、利用者A社が勝手に、しかも同じ名前で非オフィシャルな相互運用アセンブリを生成してしまうとどういうことが起こりえるか、という例を上げているのではないでしょうか。
    • good
    • 0
この回答へのお礼

こんにちは、honiyonです。

 毎度ご回答有難う御座いますm(_ _)m
 そしてご返信そ遅くなり申し訳ありません。

 その「どういうことが起こりえるか」の例がよく理解出来ず、何が起こるのかが解らず質問しました。質問がうまく伝えられず申し訳ありませんでしたm(_ _)m

 実際にPIAを発行して確認してみました。
 PIAを発行して登録すると、XPですとC:\Windows\assembly\GAC_MSIL へインストールされるようです。
 見たところGUIDでディレクトリ名が決まるので、A社の非PIAとB社のPIAが競合する事はなさそうです。(PIAと非PIAではGUIDが異なる為)

 一番理解出来なかったのは、「A社からB社へウィジェットと渡そうとすると型の不一致でエラーになる」という所でした。

 上記結果をみますと、A社とB社は同じOCXを使っているから、A社とB社で相互運用アセンブリを共有出来るはず...が、実際には共有出来ない。
 ・・・という事かなと考えています。

※.NET2.0で検証しました。.NET1.0ではRegAsmが見つからず...どう登録して良いのか分かりませんでした(^^;

お礼日時:2006/12/11 10:45

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