0

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コンテキストは、私が知る限り、有効なcomポインターであり、他のメソッドを呼び出すことができます。

xmlvsctファイルのコンテキストメニューの設定と関係があると思います。その関連部分を以下に示します。

<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です

ありがとうございました

4

1 に答える 1

0

このバグは、vsctで「MenuButton」タイプのボタンを使用したことが原因で発生しましたが、vs2010ではサポートされていません。

回避策は、代わりにコンテキストメニューのグループ内のメニューを使用することです。

于 2011-12-20T23:35:04.493 に答える