0

維持しようとしているコードに奇妙な警告があります。私は現在、現在の環境(Visual C ++ 6.0、はい、私は知っています、古代)でテストしてから、より新しいVC++バージョンに移行しています。この警告と、コンパイルしているEXEターゲットにどのような影響があるのか​​わかりません。コンパイル中に、ビルドタブに次の出力が表示されます。

Processing C:\OSDK\Libraries\PSDll\OSDKDefs.idl
OSDKDefs.idl
.\Server\Interfaces\InterfaceDef.idl(109) : warning MIDL2346 : the specified lcid is different from previous specification 
Compiling...

上記のIDLファイルは、ベンダーによって提供されたIDLファイルのわずかにハッキングされたバージョンであり、上記のライブラリのサポートは提供されていません。IDLファイル内のこのコメントは、このIDLファイルをハッキングしたこのプロジェクトの元メンテナによって追加されたと思います。私の質問は、lcidをコメントの値に戻すことで警告を消すことができ、このidlファイルの元の修飾子が避けたかった望ましくない問題を再導入する可能性があるということです。 lcidとは何ですか?lcid(0x409)とlcid(0x09)の動作の違いは何ですか?値が0x400hexの単一ビットが切り替えられていますが、そのビットは何をしますか?

警告の原因となっている行は、以下にマークされてコメントされています。以前は、このベンダーがDCOM / COMコード用に提供しているある種のテストツールとの「互換性」のために、以前はlcid(0x409)がlcid(0x09)に変更されました。以下のコメント。

//
// Component and type library descriptions
//
[
    uuid(bbf92ab1-5031-40c2-864d-1c301f51d0ce),
    //  mvs04042000 - Changed back the lcid from 0x409 to 0x09. Else we have problems
    //  connecting from the PowerTool.
    lcid(0x09),    /// <<----- WARNING HERE
    version(7.16),
    helpfile("OsdkTlb.hlp"),
    helpstring("OPC Server 7.16 Library"),
    helpcontext(0x00000010)
]
library ED3Drv
{
    importlib("stdole32.tlb");

    [
        uuid(b66ac2ca-d99e-4319-8fc0-08c0b65e65df),
        appobject
    ]                          
    coclass ED3Server
    {
        [default]   interface IED3Driver;
                    interface IDriver;
                    interface IDriverMessage;
                    interface IDataScopeConnect;
                    interface IDispatch;
        [source]    interface IDataScopeSink;
    };
};

上記のIDLは、OPC(OLE for Process Controls)と呼ばれる仕様に一致するC++DCOMクライアントおよびサーバーの作成を支援するために設計されたツールキットの一部です。

4

1 に答える 1

1

lcidはLocaleIDです。0x409は、英語(米国)である1033に相当します。0x09は有効なロケールID値ではありません。

有効な値の完全なリストについては、 http://msdn.microsoft.com/en-us/library/ms912047( v = winembedded.10 ).aspxを参照してください。

于 2012-11-11T10:26:07.437 に答える