2013-06-03 5 views
0

У меня проблемы с локализацией классов COM. Я не знаю, как локализовать IErrorInfo и другим текстом стандартным образом. Я искал, но ничего не нашел. Мои классы COM - это IUnknown интерфейс, а не два интерфейса.Как локализовать классы COM?

Спасибо за продвижение.

+0

Что вы пробовали? Вы хотите, чтобы вы динамически меняли сообщение в зависимости от ... что? –

+0

@SimonMourier Да, я хочу динамически изменять сообщение в зависимости от локали клиента. В методе 'IDispatch :: Invoke' у него есть параметр« LCID lcid », чтобы указать, какой язык использовать. Но, мой клиент рано привязывается к моему классу, а не к позднему связыванию. Таким образом, 'IDispatch :: Invoke' не является опцией. – UltimaWeapon

+1

Вы можете использовать функцию GetThreadLocale http://msdn.microsoft.com/en-us/library/windows/desktop/dd318127.aspx –

ответ

0

Механизм «COM-standard» не обеспечивает локализацию локализации для COM-объекта.

COM, возможно, слишком «низкоуровневый» для этого. Автоматизация концептуально сидит слой выше COM и поэтому IDispatchInvoke действительно предоставляет аргумент LCID; но даже с интерфейсами [dual] стандартная реализация IDispatch (CreateStdDispatchи др.) не передает LCID до вызываемого метода.

(Тем не менее, будет стандартная реализация обеспечивает LCID, если метод имеет [lcid] звёздочкой параметр? Я не знаю из первых рук, но это подразумевается так here).

Вам необходимо будет предоставить собственный механизм. Я не знаю, какой будет наиболее подходящий механизм для вашего объекта. Некоторые идеи:

  • Возможно, у всех ваших методов есть явный параметр LCID, который клиент должен заполнить. Я бы пошел и отметьте параметр [lcid] и следуйте правилам в документации MSDN.
  • У вас может быть метод SetLanguage(), который устанавливает общесистемный язык, хранящийся в экземпляре, и который контролирует язык, используемый вашими сообщениями.
  • Вы можете рассчитывать на локаль системы по умолчанию.
Смежные вопросы