【发布时间】:2012-03-06 11:23:29
【问题描述】:
我试图弄清楚如何从页面中的 Javascript 调用我的 BHO 对象中的 C# 方法。我发现了很多关于如何在 C++/ATL/Com 中执行此操作的页面,例如:
Browser Helper Objects and Scripts Options
Calling BHO method from Javascript?
我尝试在 C# 中正确实现它,但我无法让它工作,这可能是由于我没有完全理解的一些明显的 COM 问题。
我正在使用 C# 4.0。
以下是代码的相关部分:
using SHDocVw;
using mshtml;
using System.Runtime.InteropServices;
[ComVisible(true),
Guid("300736C4-DCDA-4DB0-90AD-4510A12EBBC6"),
ClassInterface(ClassInterfaceType.None),
ProgId("My Extension")]
public class BrowserHelperObject : IObjectWithSite
{
const int DISPATCH_PROPERTYPUT = 4;
const int FDEX_NAME_ENSURE = 2;
const uint LOCALE_USER_DEFAULT = 0x0400;
WebBrowser browser;
...
public void OnDocumentComplete(dynamic frame, ref dynamic url)
{
...
var window = browser.Document.parentWindow;
int pid = 0;
window.GetDispId("myExtension", FDEX_NAME_ENSURE, ref pid);
System.Runtime.InteropServices.ComTypes.DISPPARAMS dispParms = new System.Runtime.InteropServices.ComTypes.DISPPARAMS();
dispParms.cArgs = 1;
dispParms.cNamedArgs = 0;
dispParms.rgvarg = ???;
dispParms.rgdispidNamedArgs = IntPtr.Zero;
System.Runtime.InteropServices.ComTypes.EXCEPINFO einfo = new System.Runtime.InteropServices.ComTypes.EXCEPINFO();
window.Invoke(pid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, ref dispParms, this, ref einfo);
...
}
【问题讨论】:
标签: c# internet-explorer c#-4.0 com bho