環境をXPに変えたらCOMのimportでコンパイルエラー

[戻る]
たけ 2006/03/02(木) 21:30:45
たけです。いつもお世話になっています。

使用したいCOMをyyy.hにて

#import "../Exe/xxx.dll" no_namespace named_guids raw_interfaces_only
と記述しコンパイルしたところ↓のエラーがいくつか出てしまいました。

..\Include\yyy.h(27) : error C2772: #import は存在しない型ライブラリから型を参照しま
したす; '__missing_type__' はプレースホルダとして使用されます
d:\testspace\hoge\xxx.tlh(2219) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2223) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2227) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2231) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2235) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2272) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2304) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。
d:\testspace\\hoge\xxx.tlh(2307) : error C2061: 構文エラー : 識別
子 '__missing_type__' がシンタックスエラーを起こしました。

実は、このままの状態で今まで使用していたPCではちゃんとコンパイルが通るのですが
以前のPC(開発環境:VC6.0、MFC、Win2000)
今回、WindowsXPに環境を変えたところ、上記のエラーが発生するようになってしまいま
した。

またCOMは、VB6.0で作成したものです。
使用するCOMは動作確認が出来ているものなので、COMファイルが
おかしいということはないはずです。

何が原因として考えられますでしょうか?

開発環境:VC6.0、MFC、WinXP

RAPT 2006/03/02(木) 22:12:37
> #import "../Exe/xxx.dll"
とりあえず、上記の場所に指定のDLLは本当に存在するでしょうか?

たけ 2006/03/02(木) 22:21:06
はい。存在します。
このdllから、xxx.tlhが生成されてそこでもエラーがでています。
私もちょっとあやしんで
ためしに、> #import "../Exe/xxx.dll" ←をフルパスにしたのですが
現象は同じでした。

たけ 2006/03/03(金) 11:42:23
存在しないdllだと以下のエラーがでますね。

..\Include\yyy.h(27) : fatal error C1083: タイプ ライブラリ ファイルがオープンできませ
ん。'../Exe/xxx.dll': No such file or directory

ところで発生しているエラーは、なんで変な日本語なんですかね〜。
>C2772: #import は存在しない型ライブラリから型を参照しましたす

へんな日本語エラーだから、検索でひっかりそうなものですが、情報が少ない。

pseudo 2006/03/05(日) 03:34:18
英語のリソースを漁るしかなさそうですね。
……ていうか,調べてみました。
要するに,xxx.dll 自身は特に問題はないけども
その中でまた別のCOMを使っているのではありませんか?
そのCOMのありかが分かんなかった,というエラーのようです。

たけ 2006/03/06(月) 12:58:10
pseudoさん、ありがとうございます。

調査したところ、メソッドの引数に「ByVal DB As OraDatabase
」を宣言している箇所が、tlhファイルで、
__missing_type__になっているということがわかりました。

oracleのdllが見えていないのかもしれません。

たけ 2006/03/06(月) 14:09:36
[[解決]]
原因がわかりました。
以前はOracle9iを使用していたのですが、10gに変更したことが原因でした。
使用するCOMでは、oip9.dllを使用しているのに、oip9.dllが10g環境では
存在しないことからエラーになっていたようです。

ただ、もとの環境で作成したexeファイルは、10g環境でもちゃんと動いているのが
少し不思議です。

古いスレッドには追加発言できません。