維持しようとしているコードに奇妙な警告があります。私は現在、現在の環境(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クライアントおよびサーバーの作成を支援するために設計されたツールキットの一部です。