Вызвать метод IMultiLanguage2
От: Hermun  
Дата: 11.01.08 16:36
Оценка:
Захотелось использовать объект IMultiLanguage2 из C#, но не получилось. Может кто подскажет...
Делаю так —

// в с++ коде использовал CLSID_CMultiLanguage, ProgID не нашел
// цифири получил с помощью StringFromGUID2(CLSID_CMultiLanguage, ole_str)
System.Guid guid = new System.Guid("275C23E2-3747-11D0-9FEA-00AA003F8646");
Type mlang_type = Type.GetTypeFromCLSID(guid);
// какой то объект создается, надеюсь тот что мне нужен
object mlang = Activator.CreateInstance(mlang_type);

// пытаюсь вызвать метод GetNumberOfCodePageInfo и получаю исключение
// "COM target does not implement IDispatch."
object enc_num = mlang.GetType().InvokeMember("GetNumberOfCodePageInfo",
BindingFlags.InvokeMethod, null, mlang, new object[1]);

где грабли?
Re: Вызвать метод IMultiLanguage2
От: Hermun  
Дата: 11.01.08 16:54
Оценка:
добавил форматирование в надежде привлечь внимание

Захотелось использовать объект IMultiLanguage2 из C#, но не получилось. Может кто подскажет...
Делаю так —

// в с++ коде использовал CLSID_CMultiLanguage, ProgID не нашел
// цифири получил с помощью StringFromGUID2(CLSID_CMultiLanguage, ole_str)
System.Guid guid = new System.Guid("275C23E2-3747-11D0-9FEA-00AA003F8646");
Type mlang_type = Type.GetTypeFromCLSID(guid);
// какой то объект создается, надеюсь тот что мне нужен
object mlang = Activator.CreateInstance(mlang_type);

// пытаюсь вызвать метод GetNumberOfCodePageInfo и получаю исключение
// "COM target does not implement IDispatch."
object enc_num = mlang.GetType().InvokeMember("GetNumberOfCodePageInfo",
BindingFlags.InvokeMethod, null, mlang, new object[1]);


где грабли?
Re: Вызвать метод IMultiLanguage2
От: Mab Россия http://shade.msu.ru/~mab
Дата: 12.01.08 08:46
Оценка:
H> // "COM target does not implement IDispatch."
Значит, видимо, ровно то, что написано -- объект не поддерживает автоматизацию, так что через позднее связывание позвать метод не получится.
Re: Вызвать метод IMultiLanguage2
От: desco США http://v2matveev.blogspot.com
Дата: 12.01.08 08:48
Оценка:
Здравствуйте, Hermun, Вы писали:

можно сделать что-то в таком духе:

    [ComImport]
    [Guid("275C23E2-3747-11D0-9FEA-00AA003F8646")]
    class MultiLanguage
    {
    }

    [ComImport]
    [Guid("DCCFC164-2B38-11D2-B7EC-00C04F8F5D9A")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface IMultiLanguage2
    {
        uint GetNumberOfCodePageInfo();
        object GetCodePageInfo(uint uiCodePage, ushort LangId); // stub
        uint GetFamilyCodePage(uint uiCodePage);
        // other methods
    }
     
    MultiLanguage multiLanguage = new MultiLanguage();
    IMultiLanguage2 multiLanguage2 = (IMultiLanguage2)multiLanguage;
    uint n = multiLanguage2.GetNumberOfCodePageInfo();
    uint familyCodePage = multiLanguage2.GetFamilyCodePage(1251);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.