【问题标题】:Warning MIDL2346 in Visual C++ 6 source: The specified lcid is different from previous specificationVisual C++ 6 源代码中的警告 MIDL2346:指定的 lcid 与以前的规范不同
【发布时间】:2012-11-10 22:34:15
【问题描述】:

我在尝试维护的一些代码中有一个奇怪的警告。我目前正在其当前环境(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 代码提供的某种测试工具的“兼容性”,该工具在下面的 cmets 中有所提及。

//
// 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 客户端和服务器。

【问题讨论】:

    标签: visual-c++ visual-c++-6 opc typelib


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,那么谜底就更深了。知道为什么 Locale 更改可能会使 DCOM 客户端在更改时看不到 dcom SERVERS?
    • 不,我认为这无关紧要。 OPC 中的 LocaleID 用于确定错误消息的区域设置,以便服务器应为客户端提供。但我怀疑它在许多服务器中是否真的很重要。也许代码 0x09 是一个错误(在测试工具中?),应该是 0x409。
    • 这对我来说很有意义。无效的区域设置 ID 不应“修复”任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多