tlhファイルで構文エラー – プログラミング – Home

tlhファイルで構文エラー
 
通知
すべてクリア

[解決済] tlhファイルで構文エラー


たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

たけです。いつもお世話になっています。

使用したい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


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

uuidof って、使ったこと無いですけど、UUID を指定するものでしょうから、クラス名
じゃダメなんでは?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

importの前に <comdef.h> をインクルードしてみるのはどうでしょう?


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> uuidof って、使ったこと無いですけど、UUID を指定するものでしょうから、
> クラス名じゃダメなんでは?

CComPtr::CoCreateInstance の実装などに使われてて、
たとえばこんな感じで使うものです。(イメージ)

template <typename Q>
HRESULT QueryInterface(CComPtr<IUnknown>& unknown, Q** pp)
{
  return unknown->QueryInterface(__uuidof(Q), reinterpret_cast<void**>(pp));
}

インターフェイスクラスのポインタを渡せばそのGUIDが返りますが、
少なくともクラス名を入れるものではなく、試してみましたがやはり
コンパイルはできませんでした。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

多分、tlh 内の上記箇所の実体が使用する _com_ptr_tが見つからないのだと
思いますので、対応としてはdairygoodsさんが指摘されている
#include <comdef.h>
が正解ではないでしょうか。


返信引用
たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

レスありがとうございます。

>uuidof って、使ったこと無いですけど、UUID を指定するものでしょうから、クラス名
>じゃダメなんでは?
私が↓のように書いたことに対するご発言ですよね。
(*)XXXXは、使用するクラス名
すいません。COMを作ったのが他人なもので
たぶんクラス名だろうと思って書きました。
だからクラス名ではないかもしれません。

また、tlhは自動生成されたものなのでtlhファイルにエラーが
出ていますが、tlhファイルはOKなはずです。

>importの前に <comdef.h> をインクルードしてみるのはどうでしょう?
↑をやってみたのですが現象は変わりませんでした。


返信引用
たけ
 たけ
(@たけ)
ゲスト
結合: 24年前
投稿: 116
Topic starter  

原因がわかりました。
プロジェクトの中に同名でComdef.hというファイルがあります。
このファイルは、最初プロジェクトフォルダの直下にあったのですが
ひとつ上のフォルダのhogeフォルダに移動させました。
そして、プロジェクトの設定で、インクルードさせるフォルダとして
「../hoge」と加えました。
これがよくなかったようです。 実はこれを行う前はちゃんと動いていました。

解決方法としては、もともとあったComdef.hの名前を変更するだけでOKでした。

皆様のご意見から解決できました。ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました