Отладка COM и ActiveX в C # - PullRequest
       27

Отладка COM и ActiveX в C #

0 голосов
/ 10 октября 2018

Привет, дорогие коллеги-программисты,

Я пытаюсь автоматизировать некоторые задачи в графическом интерфейсе SAP с помощью библиотеки sapfewse.ocx (она находится в папке установки SAP).Похоже, это элемент управления ActiveX для запуска некоторых сценариев.

Этот процесс хорошо работает в VBA.Из-за ограничений я хочу перенести приложение на C #.Мне удалось настроить все вещи для подключения в C #, но я попал в стену: в отладчике я не могу развернуть переменные.В VBA я могу:

Объект VBA в отладчике

Но в Visual Studio, независимо от того, что я пытаюсь, нет успеха:

Ошибка при детализации Visual Basic 2017 в режиме отладки

При других настройках проекта и / или отладчика я получаю другие типы результатов, например:

Динамическое представлениепусто в Visual Studio 2010 в режиме отладки

До сих пор я пробовал все, что мог найти в Google.Я думаю, что это может быть проблема совместимости между OCX, который является 32-битным, и остальной частью системы, которая является 64-битной, но я не могу понять, как я могу это исправить.

Настройки, на которых я тестировал отладчик: Настройка1: 64-разрядная версия Windows 10, SapGui 7.5 с пакетом обновления 7 (кажется, что он 32-разрядный), 64-разрядная версия Office 2016 - VBA работает, VS не настраивается 2: 64-разрядная версия Windows 7, SapGui 7.5 с пакетом обновления 7, 64-разрядная версия Office 2010 -VBA работает, VS не

Я даже пытался с Visual Basic, но результаты все те же.

Это код, который я использую, но я не думаю, что он имеет какое-либо отношение кэто:

        SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
        object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
        object engine = SapGuilRot.GetType().InvokeMember("GetSCriptingEngine", System.Reflection.BindingFlags.InvokeMethod,
            null, SapGuilRot, null);
        GuiApplication sapGuiApp = engine as GuiApplication;
        GuiConnection connection = sapGuiApp.Connections.ElementAt(0) as GuiConnection;
        dynamic session = connection.Children.ElementAt(0) as GuiSession;
        MessageBox.Show(session.Info.User + " !!||!! " + session.Info.Transaction);

Спасибо.

ОБНОВЛЕНИЕ 1: Если я включаю опцию для использования устаревших C # и VB выражений, я получаю это отображение (все еще яя не вижу того, что вижу в VBA):

с включенными устаревшими оценщиками

...