Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 如何本地化COM类?_Visual C++_Com - Fatal编程技术网

Visual c++ 如何本地化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传递给被调用的方法 (但

我在本地化COM类方面遇到了麻烦。我不知道如何以标准方式本地化
IErrorInfo
和其他文本。我找过了,但什么也没找到。我的COM类是
IUnknown
接口,而不是双接口

感谢您的帮助。

没有“COM标准”机制为COM对象提供本地化区域设置

COM可以说是太“低级”了。自动化概念上位于COM之上的一层,因此
IDispatch
Invoke
提供了一个LCID参数;但是,即使使用
[dual]
接口,
IDispatch
CreateStdDispatch
等)的标准实现也不会将LCID传递给被调用的方法

(但是,如果一个方法有一个
[LCID]
-标记的参数,那么标准实现是否会提供LCID?我不知道第一手资料,但这是隐含的)

您需要提供自己的机制。我不知道什么是最适合你的目标的机制。一些想法:

  • 您可以让所有方法都采用客户端必须填写的显式LCID参数。我将继续使用并遵循MSDN文档中的规则标记参数
  • 您可以使用
    SetLanguage()
    方法设置实例中存储的对象范围的语言,并控制消息使用的语言
  • 您可以依赖默认的系统区域设置

您尝试过什么?您的意思是要根据…动态更改消息吗。。。什么?@SimonMourier是的,我想根据客户端语言环境动态更改消息。在
IDispatch::Invoke
方法中,其have
LCID LCID
参数指定要使用的区域设置。但是,我的客户机是早期绑定我的coclass,而不是后期绑定。因此,
IDispatch::Invoke
不是一个选项。您可以使用GetThreadLocale函数,标准方式是LoadString()。它会自动从线程的区域设置中定位要使用的字符串资源。目前还完全不清楚是否需要额外的帮助,不太可能。请确保您的字符串资源已正确本地化。感谢您的高级支持。我已经决定使用线程区域设置和
SetLanguage()。