Visual c++ 如何本地化COM类?
我在本地化COM类方面遇到了麻烦。我不知道如何以标准方式本地化Visual c++ 如何本地化COM类?,visual-c++,com,Visual C++,Com,我在本地化COM类方面遇到了麻烦。我不知道如何以标准方式本地化IErrorInfo和其他文本。我找过了,但什么也没找到。我的COM类是IUnknown接口,而不是双接口 感谢您的帮助。没有“COM标准”机制为COM对象提供本地化区域设置 COM可以说是太“低级”了。自动化概念上位于COM之上的一层,因此IDispatch的Invoke提供了一个LCID参数;但是,即使使用[dual]接口,IDispatch(CreateStdDispatch等)的标准实现也不会将LCID传递给被调用的方法 (但
IErrorInfo
和其他文本。我找过了,但什么也没找到。我的COM类是IUnknown
接口,而不是双接口
感谢您的帮助。没有“COM标准”机制为COM对象提供本地化区域设置
COM可以说是太“低级”了。自动化概念上位于COM之上的一层,因此IDispatch
的Invoke
提供了一个LCID参数;但是,即使使用[dual]
接口,IDispatch
(CreateStdDispatch
等)的标准实现也不会将LCID传递给被调用的方法
(但是,如果一个方法有一个[LCID]
-标记的参数,那么标准实现是否会提供LCID?我不知道第一手资料,但这是隐含的)
您需要提供自己的机制。我不知道什么是最适合你的目标的机制。一些想法:
- 您可以让所有方法都采用客户端必须填写的显式LCID参数。我将继续使用并遵循MSDN文档中的规则标记参数
- 您可以使用
方法设置实例中存储的对象范围的语言,并控制消息使用的语言SetLanguage()
- 您可以依赖默认的系统区域设置
IDispatch::Invoke
方法中,其haveLCID LCID
参数指定要使用的区域设置。但是,我的客户机是早期绑定我的coclass,而不是后期绑定。因此,IDispatch::Invoke
不是一个选项。您可以使用GetThreadLocale函数,标准方式是LoadString()。它会自动从线程的区域设置中定位要使用的字符串资源。目前还完全不清楚是否需要额外的帮助,不太可能。请确保您的字符串资源已正确本地化。感谢您的高级支持。我已经决定使用线程区域设置和SetLanguage()。