2012-11-10 8 views
0

유지하려고하는 일부 코드에서 이상한 경고가 나타납니다. 현재 VC++ 버전으로 옮기기 전에 현재 환경 (Visual C++ 6.0, 예, 알고 있습니다, 고대)에서 테스트하고 있습니다. 나는이 경고를 이해하지 못한다. 그리고 내가 컴파일하고있는 EXE 목표에 어떤 영향을 줄지 모른다. 위의 IDL 파일이 더 이상 위의 라이브러리에 대한 지원을 제공하는 공급 업체가 제공하는 IDL 파일의 살짝 해킹 버전입니다경고 : Visual C++ 6의 MIDL2346 소스 : 지정된 lcid가 이전 사양과 다릅니다.

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 파일의 원래 수식어가 피하고 싶지 않은 몇 가지 원치 않는 문제를 다시 입력하여 주석의 값으로 LCD를 변경하여 경고를 사라지게 할 수 있습니다. lcid 란 무엇입니까과 lcid (0x409)와 lcid (0x09)의 동작 차이점은 무엇입니까? 0x400 16 진수 값을 가진 단일 비트가 토글되고 있지만 그 비트는 무엇을합니까?

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로부터 위의 사람들은 C++ DCOM 클라이언트와 (공정 제어를위한 OLE) OPC라는 스펙과 일치하는 서버를 쓸 수 있도록 설계되었다 툴킷의 일부입니다.

답변

1

lcid는 LocaleID입니다. 0x409는 영어 (미국) 인 1033과 같습니다. 0x09는 유효한 로캘 ID 값이 아닙니다.

유효한 값의 전체 목록은 http://msdn.microsoft.com/en-us/library/ms912047(v=winembedded.10).aspx을 참조하십시오.

+0

오케이 그럼 신비가 깊어집니다. 로케일이 변경되면 DCOM 클라이언트가 변경 될 때 dcom SERVERS가 표시되지 않을 수 있습니다. –

+0

아니, 나는 그것이 중요해야한다고 생각하지 않는다. OPC의 LocaleID는 오류 메시지의 로케일을 결정하고 서버가 클라이언트를 제공해야하는 데 사용됩니다. 그러나 나는 많은 서버에서 이것이 중요한지 의심 스럽다. 어쩌면 코드 0x09는 버그 (테스트 도구에서?)이며 0x409 여야합니다. –

+0

그건 나에게 의미가 있습니다. 잘못된 로케일 ID는 아무 것도 "수정"해서는 안됩니다. –