Механизм «COM-standard» не обеспечивает локализацию локализации для COM-объекта.
COM, возможно, слишком «низкоуровневый» для этого. Автоматизация концептуально сидит слой выше COM и поэтому IDispatch
Invoke
действительно предоставляет аргумент LCID; но даже с интерфейсами [dual]
стандартная реализация IDispatch
(CreateStdDispatch
и др.) не передает LCID до вызываемого метода.
(Тем не менее, будет стандартная реализация обеспечивает LCID, если метод имеет [lcid]
звёздочкой параметр? Я не знаю из первых рук, но это подразумевается так here).
Вам необходимо будет предоставить собственный механизм. Я не знаю, какой будет наиболее подходящий механизм для вашего объекта. Некоторые идеи:
- Возможно, у всех ваших методов есть явный параметр LCID, который клиент должен заполнить. Я бы пошел и отметьте параметр [lcid] и следуйте правилам в документации MSDN.
- У вас может быть метод
SetLanguage()
, который устанавливает общесистемный язык, хранящийся в экземпляре, и который контролирует язык, используемый вашими сообщениями.
- Вы можете рассчитывать на локаль системы по умолчанию.
Что вы пробовали? Вы хотите, чтобы вы динамически меняли сообщение в зависимости от ... что? –
@SimonMourier Да, я хочу динамически изменять сообщение в зависимости от локали клиента. В методе 'IDispatch :: Invoke' у него есть параметр« LCID lcid », чтобы указать, какой язык использовать. Но, мой клиент рано привязывается к моему классу, а не к позднему связыванию. Таким образом, 'IDispatch :: Invoke' не является опцией. – UltimaWeapon
Вы можете использовать функцию GetThreadLocale http://msdn.microsoft.com/en-us/library/windows/desktop/dd318127.aspx –