Сбой после Java 32-> 64Bit с использованием сайта управления ole.EventHandler больше не работает должным образом - PullRequest
0 голосов
/ 12 апреля 2019

Добавление eventlistener к OLE-элементу управления в java.

объект обработчика событий в C # dll равен нулю, в результате чего handleEvent (OleEvent e) никогда не вызывается

Я читал кое-что об ole, используяint на 32Bit и длинный на 64Bit.Так как я являюсь Java-разработчиком и «боюсь» COM dll и подобных вещей, мои возможности здесь ограничены.Я также где-то читал, что нет истинного режима x64 для swt.ole.пакет в яве.Существует только режим совместимости ..

Java:

import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleControlSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
...
final Display display = new Display();
Shell shell = new Shell(display);
this.frame = new OleFrame(shell, 0);
try {
  this.controlSite = new OleControlSite(this.frame, 13374711, progID);
  automation = new OleAutomation(controlSite);
}
...
this.controlSite.addEventListener(1, listener);

C #: событие 1 с одним аргументом int Событие 2 с двумя аргументами int, xml

public delegate void MyEventHandler();
public delegate void MyEventWithArgsHandler(Object sender, MyEventArgs e);

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[Guid("69BFC529-1DED-450a-AB03-7DA067555914")]
public interface IDotNetViewer
{
    [DispId(1)]
    void MyEvent();
    [DispId(2)]
    void MyEventWithArgs(Object sender, MyEventArgs e);

}

public event MyEventHandler MyEvent;
public event MyEventWithArgsHandler MyEventWithArgs;

На самом деле окно открывается нормально, все работает нормально.Закрытие окна (X в верхнем углу) -> окно становится пустым, но остается открытым, не заканчивая загрузку анимации.Весь Java-приложение зависает.

Как должен выглядеть интерфейс Dispatch в C #?Нужно ли манипулировать библиотеками?Я не могу найти никаких проблем на стороне Java.Java -> C # = хорошо.C # -> Java = не хорошо.

Обходные пути также приветствуются:)

...