こんにちは、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台のパソコンに共存できない、という事でしょうか?
アドバイス頂ければ幸いです。
宜しくお願いします(..
No.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
こんにちは、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社のソフトウエアは動かせませんよ、という事が言いたいのかな、という形で私の中でまとまりつつあります。
引き続き参考ページを熟読します。
有難う御座いました。
No.1
- 回答日時:
honiyonさん、おはようございます。
また勉強させて貰っています。私はご紹介頂いたページの文章から下記のように解釈しました。外していたらすみません。
●プライマリ相互運用アセンブリPIAはCOM発行者が定義したオフィシャルな相互運用アセンブリである。発行者によって提供されたものでない相互運用アセンブリは非オフィシャルなものと見なし、使用を避けるべきである。それはPIAとは呼ばず、代替相互運用アセンブリと呼ぶ(?)。
ですから、同じOCXを利用するために「PIAを」各利用者が各々作成することはあり得ないと思います。利用者が生成したものは非オフィシャルな相互運用アセンブリです。
「PIA を使用しなかった場合にはどうなるか?」の箇所は、利用者A社が勝手に、しかも同じ名前で非オフィシャルな相互運用アセンブリを生成してしまうとどういうことが起こりえるか、という例を上げているのではないでしょうか。
こんにちは、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が見つからず...どう登録して良いのか分かりませんでした(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 一戸建て アスベスト物件解体に必要なこと 2 2023/07/12 07:10
- その他(セキュリティ) スマホで使用する場合のパスワード設定はどうしてますか? 4 2023/04/03 18:01
- ソフトウェア VisualStudio のデータブレークポイントを有効にする方法 1 2023/05/01 09:42
- その他(Microsoft Office) OneDrive Personalについて 1 2022/08/02 18:25
- ヤフオク! ヤフーアカウントについての質問です。 「不正利用が疑われる操作もしくは行為が検知されたため、利用規約 5 2022/08/29 20:22
- 格安スマホ・SIMフリースマホ SMS認証用の電話番号が欲しい 6 2022/06/12 18:21
- SSL・HTTPS パソコンのパスワードについて 6 2022/04/08 09:21
- 作詞・作曲 ボーカロイドの楽曲をyoutubeに公開する際のMV内における2次利用のイラストの著作権について 1 2022/08/26 10:46
- 自動車ローン・自動車保険・車両保険 『自賠責保険』の件 2 2022/10/25 09:14
- LINE ラインと類似したサービスは? 4 2023/03/21 20:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IT初心者です 仕事で、vb.netで...
-
ManagementClassが見つからない。
-
意味不明の実行時エラーで困っ...
-
VB.NETでDLLを読み込ませる時に...
-
EXCEL2000でVBAでWinsockをしたい
-
msvcr120d.dllがないというエラー
-
Pythonのjupiter Labを使ってます
-
C#ソースをCSCファイルにてコン...
-
using System.WINDOWSが使えない
-
C#のinternal修飾子について
-
Using System.Drawing がうまく...
-
MS Visual Studio 6.0のEnterpr...
-
DLLを作成してVBAから使用する...
-
VB.Net リビルド 意味不明なメ...
-
ExcelでVBAで自動参照設定
-
VB2010で作成したdllからtlbが...
-
ビルドが実行できない 先へ進...
-
VB.NETで参照設定したDLLの修正...
-
vba 時間の引き算 例えば 15:00...
-
アウトルックが起動しているか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
意味不明の実行時エラーで困っ...
-
ManagementClassが見つからない。
-
IT初心者です 仕事で、vb.netで...
-
VB2010で作成したdllからtlbが...
-
VB.NETで参照設定したDLLの修正...
-
オブジェクト(dll)のレジストリ...
-
ビルドが実行できない 先へ進...
-
VB.Net リビルド 意味不明なメ...
-
VB.NETでDLLを読み込ませる時に...
-
C#ソースをCSCファイルにてコン...
-
DLLを作成してVBAから使用する...
-
SOAP通信。恥を忍んで質問させ...
-
Using System.Drawing がうまく...
-
Excel-VBAでDSOFile.dll使える?
-
Windows10のVBAでDirectX 8が使...
-
msvcr120d.dllがないというエラー
-
MS Visual Studio 6.0のEnterpr...
-
VB2008→VB2010でエラーが出てま...
-
ActiveMovie Control Objectを...
-
ExcelでVBAで自動参照設定
おすすめ情報