弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

error C2872: 'CRegKey' : ambiguous symbol「error C2872: 'CRegKey': あいまいなシンボルです。」

何十年ぶりにVisual Studio 2015とか2017とかを操作してる。めっちゃ、おもしろい。

1>c:\somewhere\include\HOGEREG.h(172): error C2872: 'CRegKey': あいまいなシンボルです。
1>  c:\somewhere\include\HOGEREG.h(37): note: 'CRegKey' である可能性があります
1>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlbase.h(5533): note: または 'ATL::CRegKey'

つか、アプリケーションの設定をWindowsのレジストリに登録する必要性が理解できない。 しかもデバッグログをレジストリで設定する仕様だ。 もうこの時点でじゅうぶん胡散臭いww

MSDN→MS提供のライブラリがコンパイルエラー

前提条件を整理してみます。

 1.VC++6.0時代 のATL COM関連コードをVS2015にポーティングしようと試みている。
 2.C2504がclass CRecordで発生した。
 3.ATLはtemplateを使用している。
 4.templateは、VC++6.0時代と現在のVSとは仕様が一部異なっている。
 5.同様にC++言語の仕様自体も一部異なっている

なので、VC++6.0時代のコードを最近のVSでコンパイルすると、エラーが出るのが当たり前なわけです。
その作業は比較的高度な知識と経験が必要な試みであるということですね。しかも

 6.CRecordと言う名前のクラスはVC++6.0時代のMS提供のCOM関連のコードセットには含まれてない。
 7.つまり「MS提供ののライブラリがコンパイルエラー」という認識は誤りである。

と考えられるわけです。以上を勘案すると、

 8.発生しているエラーの省略されていない内容の提示が必要。
 9.当該のCRecordのコードの提示が必要(特に定義宣言部分)。

となるわけなのですが、いかがでしょう。

編集済み 仲澤@失業者 2016年7月29日 1:57
2016年7月29日 1:56
ゲラゲラ。

MSDN→移植のガイド: MFC Scribble Visual Studio 2015

#define _WIN32_WINNT _WIN32_WINNT_VISTA 

experts-exchange.com→CRegKey class.

migel
Commented: 2002-05-19

Hi!
Did you try adding namespace prefix before using CRegKey?
that is
ATL::CRegKey RegKey;

also try add #include into the your project stdafx.h

今のVisual StudioのATL::CRegKeyを使う修正方針にすると、メンバー関数のインターフェイスがまったく噛み合わないw。

しょーがないなー。 CRegKeyクラスをHgCRegKeyクラスに変更w コンストラクターやデストラクタの名前もHgCRegKeyに変更w。

hatenablog.jp→VisualStudioで「SAFESEH イメージを生成できません」のエラーを解消する
プロパティファイルのリンカーの詳細設定オプションで「安全な例外ハンドラーを含むイメージ」を「いいえ(/SAFESEH:NO」に設定。

あちこちの.hで

	//CRegKey m_RegKey;
	HgCRegKey m_RegKey;
みたいな修正w。

投稿されたコメント:

コメント
コメントは無効になっています。