Мы размещаем стороннюю веб-страницу в элементе управления 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
?