Нарушение доступа COM в пакете visual studio 2010 на UIShell :: ShowContext - PullRequest
0 голосов
/ 13 декабря 2011

Я довольно застрял с проблемой, которую я обнаружил при попытке перенести пакет из Visual Studio 2008 на 2010, и подумал, есть ли у кого-нибудь какие-либо идеи, пожалуйста, обратите внимание, что работал в Visual Studio 2008, и яне знаю, почему он не работает в 2010 году,

фрагмент кода здесь:

IVsUIShell uiShell = (IVsUIShell)TestPackage.GetGlobalService(typeof (SVsUIShell));
Guid context =  GuidList.GUIDTestMarkerCmdSet;
                POINTS[] menuPos = new POINTS[1];
                menuPos[0].x = (short)Cursor.Position.X;
                menuPos[0].y = (short)Cursor.Position.Y;
                var hr = uiShell.ShowContextMenu(0, ref context,(int)PkgCmdIDList.ContextMenu, menuPos, this); //access violation happens here.
                if (hr != VSConstants.S_OK)
                    return VSConstants.S_FALSE;
                break; 

Контекст uiShell, насколько я могу судить, является указателем vaild com, и я могу вызватьдругие методы на нем без его взрыва.

Я думаю, что это связано с настройкой контекстного меню в файле xml vsct.Отдельные части которых можно увидеть ниже.

<Groups>
  <Group guid="guidTestMarkerCmdSet" id="ContextGroup" priority="0x100" >
    <Parent guid="guidTestMarkerCmdSet" id="ContextMenu"/>
  </Group>
</Groups>

<Menus>
  <Menu guid="guidTestMarkerCmdSet" id="ContextMenu" type="Context">
    <Parent guid="guidTestMarkerCmdSet" id="0"/>
    <Strings>
      <ButtonText>Test Runner Context Menu</ButtonText>
      <CommandName>TestRunnerContextMenu</CommandName>
    </Strings>
  </Menu>
</Menus> 

<Buttons>
      <Button guid="guidTestMarkerCmdSet" id="cmdRunTest" priority="0x1" type="Button">
    <Parent guid="guidTestMarkerCmdSet" id="ContextGroup"/>
    <Strings>
      <ButtonText>Run Test</ButtonText>
      <CommandName>cmdRunTest</CommandName>
    </Strings>
  </Button>

  <Button guid="guidTestMarkerCmdSet" id="cmdDebugTest" priority="0x1" type="Button">
    <Parent guid="guidTestMarkerCmdSet" id="ContextGroup"/>
    <Strings>
      <ButtonText>Debug Test</ButtonText>
      <CommandName>cmdDebugTest</CommandName>
    </Strings>
  </Button>

любая помощь будет весьма востребована, я довольно взволнован atm

Спасибовы

1 Ответ

0 голосов
/ 21 декабря 2011

Эта ошибка была вызвана тем, что я использовал кнопку типа «MenuButton» в vsct, которая теперь не поддерживается в vs2010.

Обходной путь - использовать меню внутри группы контекстного меню.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...