C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: C#で書いたシェルエクステンションでのメニュー


(過去ログ 113 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■66743 / inTopicNo.1)  C#で書いたシェルエクステンションでのメニュー
  
□投稿者/ borg (1回)-(2013/05/22(Wed) 06:12:18)

分類:[C#] 


C# で ShellExtension (ContextMenu) を作成しています。

Visual Studio 2010 ultimate
動作テストOS : XP (VMware)

QueryContextMenu で、条件に従ってメニューを4個(セパレータ2個含む)
を InsertMenuItem していますが、
何故か最初のメニューアイテムだけがメニューに現れます。
具体的には、
セパレータ1、メニューA、メニューB、セパレータ2
の順で、必ずメニューA、がメニューに入ります。
AとBを入れ替えるとBが入るので、セパレータ1の次のものが
入るようです。
元はC++で作成したものがあって、今回別機能の追加を前提にC#に移植
したのですが、上記の現象が起きています。
C++で作成したものは、InsertMenu を使っていますので、
InsertMenuItem では何か制約があるのかと思い質問させてもらいました。
引用返信 編集キー/
■66744 / inTopicNo.2)  Re[1]: C#で書いたシェルエクステンションでのメニュー
□投稿者/ Azulean (167回)-(2013/05/22(Wed) 07:26:43)
2013/05/22(Wed) 07:28:45 編集(投稿者)

No66743 (borg さん) に返信
> C++で作成したものは、InsertMenu を使っていますので、
> InsertMenuItem では何か制約があるのかと思い質問させてもらいました。

具体的にコードを提示してもらった方が回答を得やすいと思います。
あとは GetLastError の値を調べるのも手がかりになるかもしれません。

// 実験していない段階で書いてしまいますが、id が同じになっているとか?


> C# で ShellExtension (ContextMenu) を作成しています。

下記のような話も理解した上で、C# で書くという道を選ばれていると思って問題ないでしょうか。
http://blogs.msdn.com/b/oldnewthing/archive/2013/02/22/10396079.aspx
(Microsoft は Shell Extension をマネージコードで書くようなシナリオをサポートしていない。そのスタンスは .NET 4 でも変わっていない)
引用返信 編集キー/
■66762 / inTopicNo.3)  Re[2]: C#で書いたシェルエクステンションでのメニュー
□投稿者/ borg (2回)-(2013/05/22(Wed) 21:30:08)
2013/05/22(Wed) 21:40:33 編集(投稿者)
2013/05/22(Wed) 21:40:14 編集(投稿者)

No66744 (Azulean さん) に返信

borgです。
>
>
>>C# で ShellExtension (ContextMenu) を作成しています。
>
> 下記のような話も理解した上で、C# で書くという道を選ばれていると思って問題ないでしょうか。
> http://blogs.msdn.com/b/oldnewthing/archive/2013/02/22/10396079.aspx
> (Microsoft は Shell Extension をマネージコードで書くようなシナリオをサポートしていない。そのスタンスは .NET 4 でも変わっていない)

【borg】
はい承知しています。
.NET4から可能になったと解説しているサイトも見たことがあります。

> // 実験していない段階で書いてしまいますが、id が同じになっているとか?

【borg】
すいません。これの返事を書いてる最中に、移植時の間違いが分かりました。

自己レスで解決済にさせていただきます。



解決済み
引用返信 編集キー/
■66765 / inTopicNo.4)  Re[3]: C#で書いたシェルエクステンションでのメニュー
□投稿者/ Azulean (168回)-(2013/05/22(Wed) 22:50:36)
No66762 (borg さん) に返信
> はい承知しています。
> .NET4から可能になったと解説しているサイトも見たことがあります。

ちゃんと読んでもらえばわかるかと思いますが、大まかには以下のようになっています。

・.NET 2.0 〜 3.5:「.NET CLR の複数バージョン混在ができないので技術的に可能であってもやるべきではない」
・.NET 4 〜:「複数バージョンの混在ができるようになったが、相変わらず Microsoft としてはテスとしていないし、サポートしていない」

前者は .NET 1.x と .NET 2.0 〜 3.5 の CLR を同一プロセスに読み込めないので、シェル拡張を Managed code で書くことによって、.NET 1.1 のアプリでクラッシュするなど、具体的な実害があり、「すべきではない」という論調でした。
後者は、CLR のバージョン混在問題は解消されたが、Microsoft は相変わらずサポート対象外というスタンスであるということです。


「可能になった」というサイトを書かれた方は、「CLR の問題が解消した」ことをもって書かれているのかもしれません。
しかし、Microsoft のメンバーが「サポート(テスト)していない」「書くべきではない」としている路線である以上、採用すべきではないと、私は考えています。

「テストしていない」と明言されている以上、将来の Windows で突然使えなくなる可能性(リスク)は、ほかの事柄よりも高くなるでしょう。
そして、シェル拡張はエクスプローラーを始め、他のコモンダイアログを扱うアプリにも影響があるなど、広範な影響があるものなので、より慎重に判断すべきだと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -