- PR -

EXEに埋め込んだアイコンリソースをstdole.IPictureDispに変換する方法

1
投稿者投稿内容
こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2006-02-14 22:03
いつもお世話になっています。こんです。
C#のアイコンリソース(System.Drawing.Icon)を
stdole.IPictureDisp型に変換する方法について教えてください。

なぜこのような質問をしたかと言いますと
ある地図開発キットをお試し版で使用しているのですが
その地図上にアイコンを登録するAPIが公開されていて
その引数がIPictureDisp型でした。

なのでIconをIPictureDispに変換したいと思っています。

自分なりに色々調べて、下記のサイトまでたどりついたのですが

http://forum.shelek.com/index.php?topic=6987.0

ここのソースを実行しますとIconConverterのコンストラクタで

「ArgumentNull_String」というエラーが発生し落ちてしまいます。
コンストラクタのbase(null)で落ちるようです。

このエラーを回避するにはどうすればいいのか?
そもそももっと別な方法があるのか確認したいと思ってます。

申し訳ないのですが何かヒントを頂けないでしょうか?
ちなみにActiveXなどの知識は全くありません。。。(すみません。。。)


// 呼び出し側はこんな感じです。
IconConvert convert = new IconConvert();

サイトではIconConvertクラスがシングルトンを想定してるのか
コンストラクタがprivateになっていましたがとりあえずpublic宣言に変更
して試してみました。

よろしくお願いいたします。
こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2006-02-14 22:07
自己レスです。

// ↓ すいません。下記は気にしないでください。
// シングルトンとか意味もなく書いてしまいました。。。

サイトではIconConvertクラスがシングルトンを想定してるのか
コンストラクタがprivateになっていましたがとりあえずpublic宣言に変更
して試してみました。


こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2006-02-14 22:48
すいません。またまた自己レスです ^^;

解決しました。
サイトに記述されてるメソッドはstatic宣言だったので
呼び出し方を以下のようにすれば上手くいきました。

IconConverter.GetIconByName()

というかサイトには呼び出し側のコードも書いてあって
この通りにしなかったのが悪かったのかもしれませんけど。。。

なぜstaticにしないとダメなのかはわからないのですが
今の所上手く地図にもアイコンが表示されるようになったのでOKです!

(System.Windows.Forms.AxHostを継承してるからこれが関係してるのかな。。。)

というわけでご迷惑おかけしました。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 01:42
引用:

こんさんの書き込み (2006-02-14 22:03) より:

「ArgumentNull_String」というエラーが発生し落ちてしまいます。
コンストラクタのbase(null)で落ちるようです。


例のサイトの実装は、コンストラクタを隠蔽化したいだけのように見えますね。
インスタンス化する場合は、CLSID "59EE46BA-677D-4d20-BF10-8D8067CB8B33" 渡すのかな?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2006-02-16 18:41
じゃんぬさん、こんばんは!
ありがとうございます。

CLSIDの件、了解しました。
折を見て調べたいと思います。

いつもすみません。
ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)