Проблема CommandBar / RibbonBar с Outlook 2016 и VB6 - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь восстановить / перекомпилировать старый плагин Outlook, который был написан на VB6, однако я получаю сообщение об ошибке, по-видимому, связанное с установкой кнопки на панели ленты.Просто не могу понять, почему и был бы признателен за любые отзывы / рекомендации.

Плагин все еще отлично работает в Outlook 2003 на Windows 7 для x86 и x64

Проблема, однако, пытается перекомпилировать его такЯ могу настроить его, а также запустить его с более свежими версиями Outlook с именем 2013 - 2018

При компиляции я получаю - Ошибка при загрузке DLL для xxxx.CommandBars (строки 40 и я полагаю также 70)

Public Function CreateTSEButton() As Boolean
10       On Error GoTo CreateTSEButton_Error

20        If Not objExplorer Is Nothing Then
             Dim mCommandBar As CommandBar
30           On Error Resume Next
40           Set mCommandBar = objExplorer.CommandBars("E-mail")
50           On Error GoTo 0
60           If mCommandBar Is Nothing Then
70              Set mCommandBar = objExplorer.CommandBars("Standard")
80           End If

90           If mCommandBar Is Nothing Then Exit Function

             'Command Bar Initialized, Now Find the Control First
             Dim mControl As Object
100          For Each mControl In mCommandBar.Controls
110              If UCase$(Trim$(TypeName(mControl))) = UCase$(Trim$("CommandBarButton")) Then
120                 If UCase$(Trim$(mControl.Caption)) = UCase$(Trim$(IDS_TSE_ON)) Or UCase$(Trim$(mControl.Caption)) = UCase$(Trim$(IDS_TSE_OFF)) Then
                       'Button Found
130                    Set mTSEButton = mControl
140                    Exit For
150                 End If
160              End If
170          Next

180          If Not mTSEButton Is Nothing Then
190             Call UpdateButtonStatus
200          Else
210             Set mTSEButton = mCommandBar.Controls.add(msoControlButton, , , , True)
220             mTSEButton.Style = msoButtonIconAndCaption
230             mTSEButton.BeginGroup = True
240             mTSEButton.Enabled = True
250             mTSEButton.Visible = True
260             Call UpdateButtonStatus
270          End If

280          Set mControl = Nothing
290          Set mCommandBar = Nothing
300       End If
310      Exit Function

CreateTSEButton_Error:

Определения;

Private WithEvents objOLApp As Outlook.Application
Private WithEvents colInspectors As Outlook.Inspectors
Private WithEvents objExplorer As Outlook.Explorer
Private WithEvents mTSEButton As Office.CommandBarButton

Ссылки (захват изображения);

захват экрана со списком ссылок

Я много раз охотился и собирал кучучтения и того, что я видел, Microsoft перешла на модель типа XML по образцу CodeJock, если это имя звучит как колокол.

Код в плагине твердый, я просто не могу скомпилировать его из-за вышеизложенногоошибка, которая, если угадать, связана с новым форматом XML, который должен использоваться для 2013 года?

У меня есть пара других приложений VB6, которые используют CodeJock для панели ленты, чтобы они были автономными и работалихорошо в VB6, так что я могу видеть, что там происходит.

Однако, нажав в Outlook и из кода VB6 и добавив / взаимодействуя с кнопкой на панели команд Outlook или на панели ленты, как я думаю, теперь называетсяне работает для меня.

Мои вопросы (или запросы о помощи) относятся к следующему (я не очень разбираюсь в интерфейсе Outlook);

a) имеет " Outlook.Explorer "был заменен чем-то другим, так что это просто вопрос использования того, что новое, что бы то ни было?б) Я читал об IDTExtensibility2, но не уверен, как это учитывается, если вообще.) Должен ли я полностью переписать код для размещения кнопки на ленточной панели / панели команд Outlook 2013+, и если да, то не могли бы вы указать мнепример, пожалуйста, для VB6 и Outlook 2013 или 2016 и т. д., поскольку у меня возникают проблемы с поиском чего-либо.

Я бы предпочел не переписывать этот код VB6 в VB.Net, если смогу помочь.

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вам нужно переписать код, который обращается к панелям команд в Outlook, с лентами на основе XML.Вам лучше создать новое дополнение VSTO в VB.Net, которое позволит вам использовать встроенный дизайнер ленты.

См. https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in-for-outlook?view=vs-2019

0 голосов
/ 23 сентября 2019

Обратите внимание, что невозможно загрузить 32-битную DLL в 64-битный процесс (и наоборот).

Я почти уверен, что файлы VB 6.0 времени выполнения 32-битные.Так что ваш Outlook 2016 должен быть 32-разрядным.Причина, по которой он работает нормально с Outlook 2003, заключается в том, что Outlook 2003 является 32-разрядным приложением.

Возможное решение может быть (1) или (2), как указано ниже:

  1. Перестройте этот плагин под VB.Net, чтобы получить 64-разрядный двоичный файл
  2. используйте 32-разрядную версию Outlook 2013 - 2016
...