グーグルで数時間過ごした後、専門家に聞いてみる時が来たと思います。VS 2005に移植しようとしているレガシーモジュール(MS Visual C ++ 6.0)があります。多数の呼び出し元アプリケーションが存在するため、可能であれば、これらの下位互換性を維持しようとしています。
コード的には、これは非常に簡単で、数時間の開発ですべてのコンパイラエラーとほとんどの警告が排除されました。
次に、リンク手順でいくつかの「未解決の外部シンボル」エラーに遭遇しました。これは、装飾された名前の微妙な違いのようです。
1セットのエラーは、time_tがVS2005の64ビット構造であることに関連していることが判明しました_USE_32BIT_TIME_T
。これらの3つを修正しました。
今、私は残りの2つのエラーで立ち往生しています:
関数は次のように定義されます
int RC_STATE::my_function(UINT stateId, UINT period, UINT index, UINT paramtype, UINT dpindex, UINT managerId, UINT calctype, UINT status, double *p_val, long *p_isc, CTime *p_time)
「古い」VisualStudioの下では、装飾された名前に満足していたようです
?my_function@RC_STATE@@QAEHIIIIIIIIPANPAJPAVCTime@@@Z
しかし今、VS2005は「CTime」パラメータにATL名前空間を含めたいと考えています。
?my_function@RC_STATE@@QAEHIIIIIIIIPANPAJPAVCTime@ATL@@@Z
この新しい装飾された名前で.DEFファイルを更新すると、コンパイルとリンクが行われます...やった!そのDLLを、以前は機能していたコードで削除するとすぐに、DLL内にプロシージャのエントリポイント(つまり、「古い」構造で名前空間がないもの)が見つからないと文句を言います。
助言がありますか?装飾された名前に名前空間を入れないようにコンパイラに指示できる、ある種のキーワード、コンパイラ指令はありますか(名前空間は良いことは知っていますが、名前空間を必要とするCTimeタイプとの競合はありません競合を解決します)。
装飾された名前を古い形式と一致させるための回避策はありますか?
どんな提案にも前もって感謝します。