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) 的行为有什么区别?正在切换值为 0x400 hex 的单个位,但该位有什么作用?

导致警告的行在下面标记和注释,以前的 lcid(0x409) 更改为 lcid(0x09) 以“兼容”该供应商为其 DCOM/COM 代码提供的某种测试工具,该工具在下面的评论。

//
// 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)规范的 C++ DCOM 客户端和服务器。

4

1 回答 1

1

lcid 是区域设置 ID。0x409 等于 1033,即英语(美国)。0x09 不是有效的区域设置 ID 值。

有关有效值的完整列表,请参阅http://msdn.microsoft.com/en-us/library/ms912047(v=winembedded.10).aspx 。

于 2012-11-11T10:26:07.437 回答