在DHTML/AJAX页面的情况下,如何使用浏览器辅助对象(BHO)获得完整的HTML主体?
我正在写一个BHO,该BHO分析了从'DWebBrowserEvents2'的'onDocumentComplete'事件中获取的HTML.目前,它可以正常工作,除非我有一个DHTML/AJAX页面,否则HTML句柄的交付过早. 对于样本,我尝试在'http://www.google.com'上使用它.从'onDocumentComplete'事件中,我可以得到大部分页面,但是在最上方的链接/锚点中,'href'用于地图,视频,Orkut等(通常为 javascript:void(0) ) ). 当页面满载时,有任何想法如何捕获它,而不是仅仅当框架/车身被加载时? 谢谢, 更新 MSHTML API似乎存在一些问题.我已经在MSDN论坛上发布了同样的问题,并有一些回答.我也详细介绍了我的问题和发现. 如果有人找到某种方法来解决这个问题,请分享... 谢谢, 解决方案 ajax dhtml的变化大部分不会引起进一步的onDocumentCo
2 2024-01-21
编程技术问答社区
OLEDB-C++-ATL'的OLEDB提供者样本使Excel崩溃(来自msado15.dll的未捕获异常)。
我已经编译了来自运行Sub TestOleDbProvider() On Error GoTo ErrHand Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=FindFiles;Server=foo;Database=bar" '* this works Dim cmd As ADODB.Command Set cmd = New ADODB.Command Set cmd.ActiveConnection = cn '* this works cmd.CommandText = "*.*" '* this works Stop Dim rs As ADODB.Recordset Set rs = cmd.Execute '* crashes here Exit Sub ErrHand: Debug.Print Err.Description & " (" & Err.Number &
2 2024-01-19
编程技术问答社区
_variant_t、COleVariant、CComVariant和VARIANT之间的用法差异以及使用SAFEARRAY的变化
我正在研究几个Visual Studio 2015 C ++项目类型,这些项目使用ADO访问SQL Server数据库.简单的示例对表执行选择,在行中读取,更新每行并更新表. MFC版本正常工作. Windows控制台版本是我在更新记录集中的行时遇到问题的地方.记录集的update()方法正在抛出一个com异常,其中错误文本的 L"Item cannot be found in the collection corresponding to the requested name or ordinal." 用0x800a0cc1的HRESULT. 在这两种情况下,我都使用标准的ADO RecordSet对象定义为; _RecordsetPtr m_pRecordSet; // recordset object 在MFC版本中,在记录集中更新当前行的功能为: HRESULT CDBrecordset::UpdateRow(const CO
0 2024-01-19
编程技术问答社区
为网络浏览器实现ActiveX控制
我的要求是开发一个可以将字节流发送到串行端口的ActiveX控件. ActiveX控件应仅公开一个函数 SendData(char* data, int nLen, int nPort) 应该通过按在Internet Explorer中呈现的Java中开发的按钮(32和64位)来调用此功能.我是否应该使用MFC/ATL或浏览器辅助对象使用无窗Activex控件.将来我可能还需要支持Firefox. 任何帮助将不胜感激. 解决方案 尽管BHO可以正常工作,但ActiveX将更适合您的要求. BHO与ActiveX非常相似 - 它们是在浏览器窗口中运行的本机或托管代码.不同之处在于,BHO适用于所有页面(创建浏览器选项卡时它是实例化的),而ActiveX当页面中的某些JavaScript代码创建它(或使用 tag. ActiveX的时间是页面. ATL是一个更好的选择.使用VS向导,并创建基于ATL的COM内服务器.然后添加一个com对象.由于您想从HTML调用
2 2024-01-10
编程技术问答社区
在Vista上托管ActiveX的问题(在一个Visual Studio 6 C++应用程序中)。
我刚刚在Vista Enterprise机器上安装了Visual Studio 6(SP5).遇到了一些问题,但我认为它设置了. 问题是我的VC ++ 6应用程序尝试托管ActiveX时失败. 我能够对其进行编译,尽管从Vista那里收到了有关RC.EXE的警告消息("此程序已知兼容问题"). 当我调试它时,我看到我的类衍生自CaxDialogiMpl的类在其create()方法上失败. 同一应用程序在XP! 上工作正常 那里有已知的兼容性问题吗? 一些技术信息: 我看到caxdialogimpl :: create()(我在此处通过null)调用了atlaxCreatedIaloga,这又称为createialogIndirectParama,它引发了一般异常. 非常感谢, Erik ps-我在机器上是管理员. OS是32位. 解决方案 我想知道这是否可能是由Vista的DEP引起的,并且它难以识别Atl Thunking代码,但仅是较新版本的
2 2024-01-10
编程技术问答社区
在发布模式下无法为COM组件创建ActiveX组件(VS2010专用)。
i在VS2008中有一个ATL COM组件(.exe)(VC ++).通过VB6客户端,我使用CreateObject并获取对象. 但是,一旦将组件更新为VS2010 SP1,则VB6客户端将不再能够创建COM对象. 如果我以调试模式编译VS2010 COM组件并获得.exe,则VB6客户端工作正常. 在发布模式下,生成.exe没有任何错误,而VB6客户端失败说无法创建ActiveX组件. 请帮助我重新宣传. 解决方案 找出为什么COM拒绝创建某些瓶子的实例确实是PITA.您所得到的只是一些通用错误代码,这些代码对您没有太大帮助.如果您通过DLL使用运行时库,则应检查是否可以在调试器之外找到这些库.我使用COM/OLE查看器检查是否可以创建镜头的对象,以便我可以排除问题与VB有关. 祝你好运. Stuart
0 2024-01-10
编程技术问答社区
从浏览器中运行一个ATL COM DLL(调用一个方法)。
我有一个使用ATL创建的com对象(无MFC支持) 该对象具有1个方法,可以打开一个对话框(所有其余所有) 目前我从另一个EXE称其为: hr = CoCreateInstance( CLSID_MyControl, NULL, CLSCTX_INPROC_SERVER, IID_IMyControl, (void**) &pMyControl ); ,然后: hr = pMyControl->MyMethod (ATL::CComBSTR(InputString1), ATL::CComBSTR(InputString2), &IntReturned, &IntReturned); 可以像浏览器一样称呼它? 如何实例化对象并从浏览器中调用我的方法(使用参数)? 解决方案 一些要点回答您的问题: 您将无法在IE或A webbrowser 基于式应用程序. 您需要实现 iObjectS
0 2024-01-10
编程技术问答社区
在MFC无窗口Activex中无法获得Cwnd类的句柄?
我较早提出了两个问题,每篇文章都有一些解决方案,但问题仍然存在. 我的第一个问题是:为什么无窗ActiveX不返回句柄.该建议是"更改创建设置,使其无窗户激活,我已经尝试过,但是m_hWnd属性仍然像GetSafeHwnd()方法一样返回零. 第二个问题是同一问题,这个问题集中在Colecontrol阶级和祖先CWND上.解决方案是这样的"在控制初始化代码中的某个地方创建不可见的窗口.处理发送到此窗口的消息,并直接调用控制方法" .所以我做到了,但是创建的类仍然返回零句柄. 这是我的新不可见类来源: // moWind.cpp : implementation file // #include "stdafx.h" #include "PINActive.h" #include "moWind.h" #include "include\xfspin.h" #include // moWind IMPLEMENT_DYNAMIC(moWind,
8 2024-01-10
编程技术问答社区
框架上的许可被拒绝
我有一个基于Caxwindow的窗口.在此窗口中,我创建WebBrowser控件.当Dispid_documentComplete发生时,我会做: void __stdcall document_complete( LPDISPATCH pBrowser, VARIANT* ) { CComQIPtr wb( pBrowser ); CComPtr doc; if( SUCCEEDED( wb->get_Document( &doc ) ) ) { _docs.push_back( doc ); } ... } 加载页面时,我在_docs中为每个文档拨打脚本(iActivescript和iActivescriptsite): function main( doc ) { try { return doc.URL;
0 2024-01-10
编程技术问答社区
如何在控件被初始化/激活后获得ActiveX控件的HWND?
我使用Visual Studio 2008在C ++中创建一个基于ATL 8.0的ActiveX控件.我需要创建一个子窗口并将其附加到ActiveX控件上. 如何访问ActiveX控件拥有的HWND? 创建控件窗口后,我可以覆盖哪个ATL函数以使用HWND? 解决方案 经过一些反复试验后,我发现了我所追求的答案. 在ATL ActiveX控件的构造函数中,您添加以下代码行: m_bWindowOnly = true; 这会导致创建控件的窗口(而不仅仅是重复使用父窗口的HWND).之后 其他解决方案 ActiveX将允许您在自己的界面上定义自己的方法(以解决Brians假设),但这可能在这里无济于事. ActiveX控件很可能由另一个组件创建. ATL也无关紧要 - 它是包装COM接口的C ++模板库. 您需要的功能是iolewindow :: getwindow.我不确定您的意思是"覆盖使用HWMD的ATL函数".检索HWND后,您可以将其传
6 2024-01-10
编程技术问答社区
如何扩展CAxHostWindow?
ATL用于COM ActiveX托管的标准类CaxhostWindow不支持接口IDocoTuiHandler2.我该如何扩展caxhostwindow class for Idochostuihandler2支持? 解决方案 实际上,有一种方法可以自定义CAxHostWindow而无需修改它.例如,我想在客户端站点对象上实现IOleCommandTarget.棘手的部分是覆盖主机窗口的创建.这是可以完成的: class ATL_NO_VTABLE CWebBrowserHost : public CAxHostWindow, public IOleCommandTarget { public: static CWndClassInfo& GetWndClassInfo() { static CWndClassInfo wc = { { sizeof(WNDCLASSEX), 0, StartWindowProc,
0 2024-01-10
编程技术问答社区
是否有MsStkPrp.dll的x64版本?
我将ATL控件移植到64位.该控件在其属性对话框中使用库存属性页面(CLSID_STOCKFONTPAGE,CLSID_STOCKCOLORPAGE). 重新编译X64后,缺少颜色和字体选项卡(因为msstkprp.dll为32位).是否有64位版本的DLL版本,或者有更好的方法在ATL ActiveX控件中实现字体和颜色? 解决方案 即使是Windows 10中也没有32位版本的MSSTKPRP.DLL,因此我将其从Windows XP Virtual Machine(%Windir%\ System32 \ MSSTKPRP.DLL)复制到目录.然后,您可以通过启动管理提示,更改为该目录并键入 来成功注册它. regsvr32 msstkprp.dll
0 2024-01-10
编程技术问答社区
我怎样才能从ATL Activex控件中向VB6返回错误字符串和错误代码?
我正在尝试使用 ccomcoclass ::错误,但看来我只能返回错误代码/或/一个消息 - 但不能同时返回. return Error(_T("Not connected"), __uuidof(IMyInterface), HRESULT_FROM_WIN32(ERROR_CONNECTION_INVALID)); 导致对象'imyinterface'的通用"方法'请求'失败"在vb6端的err.description中的错误消息(但是error_connection_invalid in err.number中),而 return Error(_T("Not connected")); 导致适当的错误消息,但在err.number中输入了通用错误代码.我该如何获得两全其美? 解决方案 您不能,这似乎是通过设计.进一步的详细信息,但简而言之,您有三个选择: 返回没有消息和VB友好com错误,即,一个 由VB运行时众所周知,根据此 kb文章; VB运行
0 2024-01-10
编程技术问答社区
对于直接在Excel工作表中使用的ActiveX控件,有哪些必要和充分的要求?
Microsoft Office支持文章" 添加或注册ActiveX Control 重要:并非所有ActiveX控件都可以直接在工作表上使用;有些只能在Microsoft Visual Basic上用于应用程序(VBA)用户形式.当您使用这些控件时,Excel显示消息如果您尝试将它们添加到工作表中. 但是,我找不到记录在任何需要必要的要求的地方和足够的直接在工作表上使用的控件. 我创建了一个新的C ++/ATL项目,我添加了一个ATL控件,并接受了整个默认值.在编译,构建和注册控件后,它出现在Excel的"更多控件"列表中(在开发人员> insert> intivex控件下访问> ActiveX控件>更多控件...)但是,尝试将其插入工作表中时,就无法插入"无法插入对象" "错误. 我必须做些什么才能解决此问题? 或 Excel对ActiveX控件的要求在哪里记录? 对于它的价值,我已经验证了向导生成的控件否则可以正常工作(用此外,我知道 AT
6 2024-01-10
编程技术问答社区
如何将MFC ActiveX控件添加到一个现有的Activex项目中?
在Visual Studio 2008中,我可以创建一个MFC ActiveX项目,并提出一个向导来创建单个ActiveX控件.我现在想在此项目中创建新控件. 我找不到任何方法. 解决方案 我刚刚发现生成ActiveX Control代码的模板和脚本位于: 中 Microsoft Visual Studio 9.0 \ vc \ vcwizards \ appwiz \ mfc \ control \ 可能有某种修改方法可以为现有项目添加控件. 其他解决方案 我也找不到一种方法. 在VC6中,您可以指定(新)项目中想要多少个ActiveX控件.也许您可以在VC6中构建该项目并将其移植到VC2008. 否则,我最好的猜测是您复制当前ActiveX控件的代码.创建两个类似于当前控件的" Ctrl"和" Propage"类,然后在.odl/.idl文件中复制标题.如果完成正确,则新控件将出现在类视图中,您可以添加方法,属性和事件. 其他解决方案
0 2024-01-10
编程技术问答社区
从Javascript中调用BHO方法?
我试图从JavaScript调用我的BHO方法.问题与以下文章中所述: javascript函数 致电bho 呼叫Javascript的C ++功能在Web浏览器控件中运行的脚本 第三链接是另一个链接,所以在谈论它,但我不了解需求和代码.另外,共享的工作示例与IE 8和IE 7的Windows Vista在Windows 7上不断崩溃. 如果它有助于使用ATL用C ++编写我的BHO. 我尝试的是: 我写了一个非常基本的bho,并尝试了该方法,如上所述在这里 igor tandetnik .并不例外,但是当我在IE中打开以下HTML文件时,它说对象不确定. function call_external(){ try{ alert(window.exte
0 2024-01-10
编程技术问答社区
我应该选择哪个VC++运行时版本--静态还是动态?
我正在开发一个64位内的VC ++ ATL COM服务器,该服务器基本上只是将所有调用重定向到Proc com Server.所以我的com服务器基本上什么都不做. 最初,它在DLL(/MD编译器开关)中使用了C ++运行时.我注意到,当我在干净的64位Win2K3 regsvr32上部署它时,错误的失败: loadLibrary({filename})失败 - 此应用程序未能启动,因为应用程序配置不正确.重新安装应用程序可能会解决此问题. Google帮助 - 问题是VC ++ 9运行时未安装.即使MSVCR90.dll与我的COM服务器处于同一目录,问题仍然存在.我猜想是因为搜索依赖库的工作方式 - 它没有查看相同的目录,我需要Windows \ System32或类似的MSVCR90.dll.由于这是我部署的复杂性,因此我切换到使用静态链接的C ++运行时(/MT编译器开关).现在它可以很好地部署. .dll文件的大小仅为110K(45k),因此它不会打扰我. 现
0 2024-01-09
编程技术问答社区
使用ATL编译dll,方法参数为Interfaces,但得到的是coclasses。
我正在使用C ++ ATL库. IDL文件中的方法用a IQTAction参数声明,但是当我在.NET中使用此类型库时,我会获得类型qtaction的方法参数,而不是IQtaction: namespace COMTest3Lib { [ClassInterface(0)] [Guid("C6DD8D8E-8375-4CA6-8534-007776D96215")] [TypeLibType(2)] public class QTTestClass : IQTTest, QTTest { public QTTestClass(); public virtual void GetActiveAction(out QTAction pActionOut); public virtual void RunAction(QTAction pActionIn); } } namespace CO
0 2024-01-07
编程技术问答社区
在.NET中编写IE插件的优势和劣势
由于我是一个.NET开发人员,所以我打算在.NET中编写IE插件.这里有人在.NET中具有/开发IE扩展的经验可以分享他们的知识吗? 特别是我想了解与ATL com相比,使用.NET的优势和缺点. 解决方案 我想说的是,优势和缺点不与IE插件绑定,而是与编程语言及其平台绑定. .net: 它比C ++更容易,更安全 易于创建和编程UI 要求最终用户机器安装了特定的.NET框架(您可以在兼容框架上运行插件) 使用更多内存 如果您需要的话,需要声明Winapi功能和常数 c ++(ATL com方法): 使用较少的内存 可以在静态上链接,因此不需要.NET框架,视觉C ++ runtimes等(换句话说,无处不在) 易于致电Winapi 需要更多的知识,通常比.NET更加艰难 可怕的UI编辑器(至少是ATL/MFC的内置) 因此,如果您是一个.NET Guy,请注意与不同.NET框架版本的兼容性.其他东西很小.
2 2024-01-07
编程技术问答社区
如何在非管理的ATL GUI中嵌入Windows Form?
我有一个Windows形式的用户控件,该控制可见.现在,我想将控件嵌入到ATL对话框中. ATL项目(未托管的C ++)只能获得Winform的progid,并在运行时动态创建和嵌入. 这是可能的,如果是这样,我该怎么做? 解决方案 我想出了一种使它工作的方法. 以下代码使用称为M_Control的CWND,该CWND通过createControl的少量文档版本来托管Winform.到目前为止似乎正常工作.如果有人看到任何缺点,请发表评论或回复. AfxEnableControlContainer(); Microsoft::VisualC::MFC::CControlCreationInfoEx i; i.Init(System::Type::GetTypeFromProgID(gcnew System::String(sProgID)), CControlCreationInfo::ReflectionType); i.m_clsid = C
0 2023-12-09
编程技术问答社区