Использование RunningObjectTable вместе с WPF WebBrowser - PullRequest
0 голосов
/ 18 мая 2018

Мы размещаем стороннюю веб-страницу в элементе управления WPF WebBrowser.Сторонний веб-сайт использует VBScript GetObject(, "Prog.Id") для получения доступа к уже созданному объекту.

Я знаю, что это глупая идея, поэтому, пожалуйста, не отвечайте мне об этом.Нам нужно интегрироваться с этим сайтом, и они не могут изменить свой подход к VBScript.

Используя PInvoke, я могу вызывать RegisterActiveObject и GetActiveObject из кода моего приложения WPF.

[DllImport("oleaut32.dll")]
public static extern int RegisterActiveObject([MarshalAs(UnmanagedType.IUnknown)] object punk, ref Guid rclsid, uint dwFlags, out int pdwRegister);

[DllImport("oleaut32.dll", CharSet = CharSet.None, ExactSpelling = false)]
public static extern void GetActiveObject(ref Guid rclsid, IntPtr pvReserved, [MarshalAs(UnmanagedType.IUnknown)] out Object ppunk);

Если я использую GetObject в коде WPF после RegisterActiveObject, я получаю ранее инстанцированную версию, но VBScript, работающий в элементе управления WebBrowser, не может видеть запущенный экземпляр

Это код для регистрации экземпляра с помощью ROT

int regResult = RegisterActiveObject(gatewayObject, ref gatewayClsIdGuid, 0, out this.objectRegisterValue);

Вызов GetObject VBScript, который не видит зарегистрированный экземпляр:

If (existing = True) Then
    MsgBox("Getting not creating")
    Set objTest = GetObject(, progId)
Else
    Set objTest = CreateObject(progId)
End if

On Error Goto 0
If (objTest Is Nothing) Then
    MsgBox("Unable to get object")
Else
    MsgBox("Got the object successfully")
End If

Почему вызов GetObject(, progId) возвращает Nothing?

...