Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Работа с COM сервером на C#


Автор: Bchgroup 12.8.2012, 12:53
Здравствуйте! 

Есть 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:

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)