たけです。いつもお世話になっています。
使用したいCOMファイル「xxx.dll」をプロジェクト直下に置き、
#import xxx.dll no_namespace named_guids raw_interfaces_only
と記述しコンパイルしたところ↓のエラーがいくつか出てしまいました。
c:\hogehoge\プロジェクト名\debug\xxx.tlh(77) : error C2059: 構文エラー : '__uuidof'
tlhファイルのエラーの箇所は↓のような記述です。
_COM_SMARTPTR_TYPEDEF(_XXXXX, __uuidof(_XXXXX)); (*)XXXXは、使用するクラス名
またCOMは、VB6.0で作成したものです。
使用するCOMは動作確認が出来ているものなので、COMファイルが
おかしいということはないはずです。
このエラーを解決するにはどうしたらよいでしょう?ご教授ください。
開発環境:VC6.0、MFC、Win2000
uuidof って、使ったこと無いですけど、UUID を指定するものでしょうから、クラス名
じゃダメなんでは?
importの前に <comdef.h> をインクルードしてみるのはどうでしょう?
> uuidof って、使ったこと無いですけど、UUID を指定するものでしょうから、
> クラス名じゃダメなんでは?
CComPtr::CoCreateInstance の実装などに使われてて、
たとえばこんな感じで使うものです。(イメージ)
template <typename Q>
HRESULT QueryInterface(CComPtr<IUnknown>& unknown, Q** pp)
{
return unknown->QueryInterface(__uuidof(Q), reinterpret_cast<void**>(pp));
}
インターフェイスクラスのポインタを渡せばそのGUIDが返りますが、
少なくともクラス名を入れるものではなく、試してみましたがやはり
コンパイルはできませんでした。
多分、tlh 内の上記箇所の実体が使用する _com_ptr_tが見つからないのだと
思いますので、対応としてはdairygoodsさんが指摘されている
#include <comdef.h>
が正解ではないでしょうか。
レスありがとうございます。
>uuidof って、使ったこと無いですけど、UUID を指定するものでしょうから、クラス名
>じゃダメなんでは?
私が↓のように書いたことに対するご発言ですよね。
(*)XXXXは、使用するクラス名
すいません。COMを作ったのが他人なもので
たぶんクラス名だろうと思って書きました。
だからクラス名ではないかもしれません。
また、tlhは自動生成されたものなのでtlhファイルにエラーが
出ていますが、tlhファイルはOKなはずです。
>importの前に <comdef.h> をインクルードしてみるのはどうでしょう?
↑をやってみたのですが現象は変わりませんでした。
原因がわかりました。
プロジェクトの中に同名でComdef.hというファイルがあります。
このファイルは、最初プロジェクトフォルダの直下にあったのですが
ひとつ上のフォルダのhogeフォルダに移動させました。
そして、プロジェクトの設定で、インクルードさせるフォルダとして
「../hoge」と加えました。
これがよくなかったようです。 実はこれを行う前はちゃんと動いていました。
解決方法としては、もともとあったComdef.hの名前を変更するだけでOKでした。
皆様のご意見から解決できました。ありがとうございました。