0

私は次のようなかなり大きなOutlookアドインを持っていますribbon.xml:

<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
  <ribbon>
    <tabs>
      <tab idMso="TabMail">
    <group id="groupViewHome" label="View tasks">
      <toggleButton id="buttonToggleHistoryHome" getLabel="getLabelToggleHistory" imageMso="ControlToggleButton" onAction="toggleHistory_Click" size="large" getPressed="getEnabledToggleHistory" />
    </group>
      </tab>
      <tab idMso="TabAddIns" label="DCP">
    <group id="groupCreateTask" label="Create a task">
      <button id="buttonNewTask" label="New Task" imageMso="QueryAppend" onAction="buttonNewTask_Click" size="large" getEnabled="getMailSelected" />
    </group>
    <group id="groupEdit" label="Edit a task">
      <button id="buttonAddSelection" label="Copy selection to task" imageMso="QueryUpdate" onAction="selectedText_Click" size="large" getEnabled="getMailAndIDSelected"/>
    </group>
    <group id="groupView" label="View tasks">
      <button id="buttonTaskHistory" imageMso="FileDocumentInspect" onAction="taskInfo_Click" getLabel="getButtonHistoryLabel" />
      <toggleButton id="buttonToggleHistory" getLabel="getLabelToggleHistory" imageMso="ControlToggleButton" onAction="toggleHistory_Click" getPressed="getEnabledToggleHistory" />
      <checkBox id="buttonTriggerMail" label="Toggle auto-history" onAction="Trigger_Click" getPressed="getInitialTriggerState"/>
    </group>
    <group id="groupAttach" label="Attachments">
      <button id="saveMail2" label="Add mail as .msg attachment" imageMso="AttachItem" onAction="saveMail_Click" getEnabled="getMailAndIDSelected"/>
      <button id="selectAttach" label="Select attachments to add" imageMso="AttachMenu" onAction="selectAttach_Click" getEnabled="getMailAndIDSelectedAndAttach"/>
    </group>
    <group id="groupLinks" label="Hyperlinks">
      <button id="addLinkToMail" label="Add task link to mail body" imageMso="HyperlinkInsert" onAction="addLink_Click" size="large" getEnabled="getMailAndIDSelected"/>
    </group>
      </tab>
    </tabs>
  </ribbon>
  <contextMenus>
    <contextMenu idMso="ContextMenuReadOnlyMailText">
      <menu id="dcp" label="DCP">
    <button id="selectedText" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
    <button id="addTask" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailTable">
      <menu id="dcp3" label="DCP">
    <button id="selectedText2" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
    <button id="addTask3" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailTableCell">
      <menu id="dcp4" label="DCP">
    <button id="selectedText3" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
    <button id="addTask4" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailListTable">
      <menu id="dcp5" label="DCP">
    <button id="selectedText4" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
    <button id="addTask5" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailPictureTable">
      <menu id="dcp6" label="DCP">
    <button id="selectedText5" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
    <button id="addTask6" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailTextTable">
      <menu id="dcp7" label="DCP">
    <button id="selectedText6" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
    <button id="addTask7" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailTableWhole">
      <menu id="dcp8" label="DCP">
    <button id="selectedText7" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
    <button id="addTask8" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailList">
      <menu id="dcp9" label="DCP">
    <button id="selectedText8" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
    <button id="addTask9" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuReadOnlyMailHyperlink">
      <menu id="dcp10" label="DCP">
    <button id="selectedText9" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
    <button id="addTask10" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuMailItem">
      <menu id="dcp2" label="DCP">
    <button id="buttonTaskHistoryMail" label="View task history" imageMso="SourceControlShowHistory" onAction="taskInfo_Click" />
    <button id="addTask2" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
    <button id="saveMail" label="Add mail as .msg attachment" imageMso="AttachItem" onAction="saveMail_Click" />
      </menu>
    </contextMenu>
    <contextMenu idMso="ContextMenuAttachments">
    <button id="buttonAddAttachment" label="Add attachment to task" imageMso="AttachMenu" onAction="addAttachment_Click"/>
    </contextMenu>
  </contextMenus>
</customUI>

ご覧のとおり、有効にするために無効化が必要なアクションがいくつかあります。ボタンを切り替えてください。アドインは正常に起動しますが、場合によってはクラッシュします。以下は、ほとんどの場合、アドインがクラッシュするいくつかの例です。

  • 新しいインスペクターウィンドウでメールアイテムを開き、再度閉じる
  • 複数のウィンドウが開き、カスタムボタンが入ったコンテキストメニューが開きます

それが発生する機会は、私がそれを自分で呼び出すときではなく、新しいコンテキストメニューまたはリボンの作成時の自動無効化にすべて関係していることを私に確信させます。getEnabled、getPressed ...属性を削除しても、エラーは解決しません。クラッシュする代わりにエラーを抑制する方法や、エラーを修正する方法がわかりません。ですから、誰かがこれについて助けてくれるか、私にもっと情報を与えることができれば、それは大いにありがたいです。さらにコード(getEnabled、getPressed ...メソッドなど)が必要な場合は、お知らせください。

私の無効化メソッド。ほとんどの場合、ブール値を返すだけであることに注意してください。これらのブール値は、ribbon.csクラス内のプライベート変数として保持されます

public bool getEnabledToggleHistory(IRibbonControl control)
{
   return toggleHistoryPanelState;
}

public bool getMailSelected(IRibbonControl control)
{
    try
    {
        MailItem mailItem = getMail();
        if (mailItem != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    catch (System.Exception ex)
    {
        return false;
    }
}

public bool getMailAndIDSelected(IRibbonControl control)
{
    return mailAndIDSelected;
}

public bool getMailAndIDSelectedAndAttach(IRibbonControl control)
{
    if (hasAttachments && mailAndIDSelected)
    {
        return true;
    }
    return false;
}

新しいVisualStudioインスタンスでデバッグすると、次のようになります。

Unhandled exception at 0x70B5B2A7 (MSO.DLL) in OUTLOOK.EXE: 0xC0000005: Access violation reading location 0x00000000.

ソリューションからコードをデバッグした場合、エラーをキャッチすることはできません。また、未処理のコードがあるとは言えません。クラッシュするだけです。

4

1 に答える 1

0

(コメントでの議論に基づいて、一種の「回答」を投稿します)

それをキャッチまたはログに記録できない場合(例外をキャッチするだけでなく、何かをダンプに入れてください-一時ユーザーフォルダーにダンプできます)...

私の最善の提案は、the good old divide and conquer-すべてを削除し(すでに「フラグ」のみが原因であると言っています)、1つのボタンに1つのものを残します-「すべての問題を引き起こすものが得られるまで、すべてのメソッドを「返す」 -そのようなものです。

(リボンなどのOL XMLシステムは非常にエラーが発生しやすいため、すべてをチェックする必要があります(細心の注意を払ってください)。OLエラーはあまり説明的ではなく、ほとんどの場合クラッシュします。ところで、コンテキスト全体を削除するとどうなりますか。 -メニュー?)

于 2013-03-25T14:46:13.093 に答える