Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с COM сервером на C#, Не удается вызвать метод 
:(
    Опции темы
Bchgroup
Дата 12.8.2012, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 7.7.2009

Репутация: нет
Всего: нет



Здравствуйте! 

Есть COM сервер написанный на C++

В нем интерфейс IServController наследуемый от IUnknown
В нем есть метод 

Код
STDMETHODIMP  ServController::PauseServiceById( long id, long* pResult)
{
    MessageBox(NULL,L"Pause",L"Service",MB_OK);
    return S_OK;
}


Соответственно из C# пытаюсь вызвать его двумя способами:
Как в MSDN
Код
namespace ServControllerClassLib
{
     [Guid("1861A83B-70F7-46FE-AEB2-9645DE1FE623"),InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface IServController   // Cannot list any base interfaces here 
    {
        // Note that IUnknown Interface members are NOT listed here:

         void ConnectToSC( string Mname,
            string Login,
            string Password,
            string Domain,
             long pResult
            );



        void PauseServiceById(int i,  ref  int p);
        void StopServiceById(long i, long p);
        void StartServiceById(long i, long p);

        void GetServiceNameById(long d, String g);
        void GetServicesCount(long d);
        void GetSetviceStatusById(long a,long b);

    
    }
    [ComImport, Guid("1861A83B-70F7-46FE-AEB2-9645DE1FE623")]
    class ServController   // Cannot have a base class or
    // interface list here.
    {
  
    }
}


Далее в самом коде

Код
  ServControllerClassLib.ServController sController = new ServControllerClassLib.ServController();
  ServControllerClassLib.IServController mc= (ServControllerClassLib.IServController)sController;
  
  int pResult=100;

  mc.PauseServiceById(0,ref pResult);



и второй способ

Код
Type scType = Type.GetTypeFromProgID("ServController.Component.1");
object obj = Activator.CreateInstance(scType);

Int32 pResult=100;
            
scType.InvokeMember("PauseServiceById", BindingFlags.Public | BindingFlags.InvokeMethod , null, null, new Object[2]{1,pResult});


Соответственно в первом случае имею AccessViolation
Во втором MissingMethodException

Соответственно ссылки на проекты: 
https://dl.dropbox.com/u/18970223/COMClient.7z
https://dl.dropbox.com/u/18970223/COMSrv.7z

Очень прошу о помощи!  :wall:
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.