在WPF WebBrowser

时间:2018-05-18 16:55:37

标签: wpf vbscript com com-interop

我们在WPF WebBrowser控件中托管第三方网页。第三方网站使用VBScript GetObject(, "Prog.Id")调用来访问已经实例化的对象。

我知道这是一个愚蠢的想法,所以请不要回答告诉我。我们需要与此站点集成,他们无法更改其VBScript方法。

使用PInvoke我可以从我的WPF应用程序代码中调用RegisterActiveObject和GetActiveObject。

[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);

如果我在RegisterActiveObject之后在WPF代码中使用GetObject,我得到之前实例化的版本,但是在WebBrowser控件中运行的VBScript无法看到正在运行的实例

这是使用ROT注册实例的代码

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

未看到已注册实例的VBScript GetObject调用是

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

0 个答案:

没有答案