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

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

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

Re[4]: #import について


(過去ログ 88 を表示中)

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

■52543 / inTopicNo.1)  #import について
  
□投稿者/ 雲 (20回)-(2010/08/14(Sat) 09:27:09)

分類:[C/C++] 

こんにちは。

最近、COM を使って遊んでいると、_com_ptr_t というものを知りました。
また、これを使う際には、以下のような記述をしておくと、自動的に CLSID などを
設定してくれる。ことまでは調べることが出来ました。

#import "msxml.dll" no_namespace named_guids

が。。。visualStudio 2010 で素直に上記の文を書くとコンパイル時に、

fatal error C1083: タイプ ライブラリ ファイルを開けません。'msxml.dll': No such file or directory

とコンパイラに怒られてしまいました。単純にパスが通っていないだけだとは思うのですが、どこにパスを
張ればよいのでしょう?

検索すると、SxS には入っているようですが。。。

まさか、SxS にリンクを張るのが正しいとは思えず困っています。

よろしくお願いします。


引用返信 編集キー/
■52544 / inTopicNo.2)  Re[1]: #import について
□投稿者/ 雲 (21回)-(2010/08/14(Sat) 09:37:52)
ごめんなさい。訂正をさせてください。

> #import "msxml.dll" no_namespace named_guids

ではなく

#import <wincodecodecs.dll> named_guids

でコンパイル時に怒られてしまいます。


引用返信 編集キー/
■52545 / inTopicNo.3)  Re[2]: #import について
□投稿者/ 雲 (22回)-(2010/08/14(Sat) 11:18:04)
> でコンパイル時に怒られてしまいます。

追記します。↓
fatal error C1083: タイプ ライブラリ ファイルを開けません。'c:\windows\system32\windowscodecs.dll': タイプ ライブラリ/DLL の読み込みエラーです。

でも、探すと、ちゃんと、DLLはSystem32以下にあるのですが。。。
引用返信 編集キー/
■52546 / inTopicNo.4)  Re[3]: #import について
□投稿者/ 魔界の仮面弁士 (1748回)-(2010/08/14(Sat) 11:44:08)
2010/08/14(Sat) 11:50:25 編集(投稿者)

No52545 (雲 さん) に返信
> fatal error C1083: タイプ ライブラリ ファイルを開けません。'c:\windows\system32\windowscodecs.dll': タイプ ライブラリ/DLL の読み込みエラーです。

windowscodecs.dll の場合、DllGetClassObject 関数がエクスポートされているところをみると、
OLE コンポーネントオブジェクト DLL ではあるようですが、(msxml.dll とは違って)型情報を持った
ActiveX DLL では無いようです。これ自身にはタイプライブラリが含まれていないようなので、
無理に参照しようとしても、0x80029C4A (TYPE_E_CANTLOADLIBRARY) 等になってしまうことでしょう。

C/C++ は専門外なので、具体的な設定方法等についてはさっぱり分からないのですが、
とりあえず "windowscodecs" で検索したところ、下記の記事がヒットしました。
WIC API の COM インターフェイスを使うための解説文のようですが、参考になるでしょうか。
http://msdn.microsoft.com/ja-jp/magazine/cc500647.aspx
引用返信 編集キー/
■52547 / inTopicNo.5)  Re[3]: #import について
□投稿者/ 渋木宏明 (41回)-(2010/08/14(Sat) 11:59:43)
渋木宏明 さんの Web サイト
> fatal error C1083: タイプ ライブラリ ファイルを開けません。'c:\windows\system32\windowscodecs.dll': タイプ ライブラリ/DLL の読み込みエラーです。
>
> でも、探すと、ちゃんと、DLLはSystem32以下にあるのですが。。。

.dll にタイプライブラリが格納されていないんでしょう。

別途タイプライブラリファイル(通常は拡張子 .tlb)が提供されているようなら、それを #import してください。

引用返信 編集キー/
■52548 / inTopicNo.6)  Re[4]: #import について
□投稿者/ 渋木宏明 (42回)-(2010/08/14(Sat) 12:13:43)
渋木宏明 さんの Web サイト
2010/08/14(Sat) 12:14:55 編集(投稿者)

> WIC API の COM インターフェイスを使うための解説文のようですが、参考になるでしょうか。
> http://msdn.microsoft.com/ja-jp/magazine/cc500647.aspx

この記事は .tlb (つまりは #import ディレクティブ)を使ってないですね。

.tlb が提供されていない場合、ヘッダファイルなどからインターフェース定義が得られているなら、_COM_SMARTPTR_TYPEDEF マクロで特定のインターフェース用のスマートポインタを定義することができます。




引用返信 編集キー/
■52551 / inTopicNo.7)  Re[4]: #import について
□投稿者/ 雲 (23回)-(2010/08/14(Sat) 18:14:48)
雲です。

> .dll にタイプライブラリが格納されていないんでしょう。
> 別途タイプライブラリファイル(通常は拡張子 .tlb)が提供されているようなら、それを #import してください。

探してみましたが、探し方が悪いのか .tlb のファイルは見つからなかったので、_COM_SMARTPTR_TYPEDEF を使う
方向で。

>WIC API の COM インターフェイスを使うための解説文のようですが、参考になるでしょうか。
>http://msdn.microsoft.com/ja-jp/magazine/cc500647.aspx

はい。これを参考に、CComPtr なんかを使っていたのですが、_com_ptr_t を使ってみたくなって質問をしてしまいました。

本当は、C# から Windows Imaging Component を使いたかったのですが、C++ から使うことを求められることがあって
四苦八苦しています。
(C++ で画像を読み書きする場合は、GDI+で画像を読み書きするのはできるのですが、使い方が悪いのか、GIF の書き出しが
うまくいかず、面倒になって?WICへ浮気中です)

でも、あまり、WIC の記事は日本語/英語を問わず少ないのにちょっとびっくりしました。
(そういえば、GDI+の記事も少なかったような。。。簡単すぎてあまり記事になっていないのもしれませんが、雲には、
なかなか厳しい現実です(^^))

とりあえず、_COM_SMARTPTR_TYPEDEFを定義する方向で進めたいと思います。

ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -