IE中,ActiveX控件中控制Internet Explorer 事件

MFC集成WebBrowser控件实战:从基础创建到C++/JS双向通信 在Windows桌面开发中,将Web内容嵌入原生应用是常见的需求,这通常通过浏览器控件实现。其核心原理是利用操作系统提供的浏览器渲染引擎,在应用窗口中创建一个可交互的网页容器。这项技术的价值在于能够融合Web的动态内容、丰富交互与原生应用的系统级能力,实现混合应用开发。典型的应用场景包括内嵌报表展示、在线文档查看、地图集成以及需要Web界面但又要调用本地功能的客户端程序。本文聚焦于MFC框架,深入探讨了如何集成经典的WebBrowser控件,涵盖了CHtmlView与手动创建两种方案,并详细解析了C++与J 阅读详情

如何对webbrowser和IE编程(十一)

转http://blog.youkuaiyun.com/shanhe/article/category/15859

仅仅用于Internet Explorer的事件

有些是仅仅可用于自动化 Internet Explorer,:

·         OnQuit

  • OnVisible
  • OnToolBar
  • OnMenuBar
  • OnStatusBar
  • OnFullScreen
  • OnTheaterMode

大多数这些事件属于浏览器用户接口. 另外一些必须要先是或者关闭Internet Explorer才发生. 一些情形中,这些事件将在你宿主webbrowser空间的时候发生. 举例来讲,当你在你的应用程序设置MenuBar 属性,尽管你的WebBrowser control 并没有菜单条,OnMenuBar 事件将被激发, 但是如果你显示或者隐藏你的应用程序菜单条,OnMenuBar 事件不会激发.为什么?因为你的菜单条由你控制,webbrowser对这些用户接口项一无所知. 很长时间以来,这些相互矛盾的功能是一些混乱的根源。

其中一个事件—OnQuit—将永远不会在你的应用程序中激发.举个例子, 察看表 Table 7-6. 注意到OnQuit事件当用户关闭 Internet Explorer 或者当Quit 方法被调用时激发.如果你宿主改控件且用户关闭你的应用程序,  OnQuit 事件不会激发.它仅仅在你自动化Internet Explorer 且用户手动关闭浏览器时候发生.另外,如果你在宿主一个webbrowser控件时试图调用Quit方法,一个自动化错误将会发生.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

自ActiveX控件中控制Internet Explorer 事件

通过 IWebBrowser2 接口你可以在利用vc++在ActiveX 控件中接受事件.

你可能疑惑为什么要在ActiveX控件中接受 Internet Explorer事件.之前介绍"DocumentComplete," 事件时候,我提到过你不可以在DocumentComplete event 事件被触发前安全存取文档.在Activex控件中获知DocumentComplete 事件被触发的途径是ActiveX 控件接收 Internet Explorer并处理 DocumentComplete 事件.

除了你必须接收Internet Explorer 事件外, 你可以开发一个可导航的类浏览器的应用于公司intranet或者学校网络.你可以在ActiveX control中自动化Internet Explorer并接受其事件。.

当你刷新一个页面,也许DocumentComplete 事件并不激发.当DocumentComplete 事件并未触发, ProgressChange 事件被用来控制以检测某页是否完成加载.载一个简单的web页或者没有嵌入帧时ProgressChange 工作的很好.

记住 ProgressChange 右两个参数告诉你下载操作的进度.第一个参数当下在完成时候设定为-1, 者可以帮助你检测是否可做类打印等操作

让我们学习一个打印控active控件,为从Internet Explorer接收事件,你必须设置事件接收,意味着你必须通过IWebBrowser2  接口以获得实现,如下实现:

protected:
   CComPtr<IWebBrowser2> m_spWebBrowser;

.

接下来覆盖IOleObjectImpl 的SetClientSite方法的实现. SetClientSite 放方法是在Internet Explorer通知气客户区的控件的时候被调用.你可用客户区的site指针 (m_spClientSite) 存取容器并且得到IWebBrowser2接口指针. 在SetClientSite 实现中, 你必须首先调用其基类版本,就想如下:

IOleObjectImpl<CPrintCtl>::SetClientSite(pClientSite);

这些带吗看起来可能有些生疏, 但记住 IOleObjectImpl是一个模版类. 为了调用它的方法, 你必须制定要求的模版参数以指示编译器哪一个类实例在调用SetClientSite 方法时被使用. 现在讲残存的访问容器和IWebBrowser2接口指针的代码从Print方法迁移到SetClientSite 方法Now move the remaining codePrint 方法将看起来如下:

STDMETHODIMP CPrintCtl::Print()
{
   ATLASSERT(m_spWebBrowser);
 
   HRESULT hr = E_FAIL;
 
   if (m_spWebBrowser)
   {
      hr = m_spWebBrowser->ExecWB(OLECMDID_PRINT, 
                                  OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
   }
 
   return hr;
}

而 SetClientSite 方法将接收事件,SetClientSite 讲看起来如下:

注意


你不能够再FinalConstructm方法中接收事件因为此时客户站点还未设定。

STDMETHODIMP CPrintCtl::SetClientSite(IOleClientSite* pClientSite)
{
   HRESULT hr = IOleObjectImpl<CPrintCtl>::SetClientSite(pClientSite);
 
   if (!pClientSite)
   {
      return hr;
   }
 
   CComPtr<IOleContainer> spContainer;
   m_spClientSite->GetContainer(&spContainer);
 
   ATLASSERT(spContainer);
 
   if (SUCCEEDED(hr))
   {
      // Set up the event sink.
      //
      CComQIPtr<IServiceProvider, &IID_IServiceProvider>
         spServiceProvider(spContainer);
 
      ATLASSERT(spServiceProvider);
 
      if (spServiceProvider)
      {
         spServiceProvider->QueryService(SID_SInternetExplorer,
                                         IID_IWebBrowser2,
                                         (void**)&m_spWebBrowser);
         ATLASSERT(m_spWebBrowser);
 
         if (m_spWebBrowser)
         {
            AtlAdvise(m_spWebBrowser, GetUnknown(),
                      DIID_DWebBrowserEvents2, &m_dwCookie);
         }
      }
   }
 
   return hr;
}

注意到在AtlAdvise 调用时你必须建立protected 或者privateDWORD的数据成员以掌握返回自AtlAdvise 方法的cookie. CprintCtl 类的构造函数初始化改成员为0.尽管我们注意到CPrintCtl::SetClientSite 方法使用IOleObjectImpl::SetClientSite 方法的返回值. 此方法并不检查已被调用的返回值因为CPrintCtl::SetClientSi将 反射客户站点的设定状态.

最好, 我们检查pClientSite 的返回值,输入参数是NULL. 如果这样,我们当Internet Explorer 卸载这些控时, 他调用SetClientSite w设置为NULL. 或者告诉你已经从站点解除, 所以包含一个接口,IWebBrowser2 容器不需要一定执行。.

因为当你完成任务时应当关闭任务的站点, 也包含某个控件被卸载时。检查pClientSite是否为NULL,以便放置AtlUnadvise 方法. 记住pClientSite在控件被卸载时为 NULL. 看起来如下:

if (!pClientSite)
{
   ATLASSERT(m_spWebBrowser);
 
   if (m_spWebBrowser)
      AtlUnadvise(m_spWebBrowser, DIID_DWebBrowserEvents2, m_dwCookie);
 
   return hr;
}

现在你可以使用AtlAdvise接收事件,让我们控制事件.为此你必须覆盖重写IDispatchImpl 的Invoke方法. 典型的,你将为你的时间建立一个单独的类因为 Internet Explorer 事件的DISPIDs 必须同你的控件的DISPIDs 不同.但在此你可以简单在CPrintCtl  类中来实现.实现Invoke (入代码所示)以控制ProgressChange 事件.在事件句柄, 如果progres的总数设定为-1,设定一个标志变量指示已被打印.

 

STDMETHODIMP CPrintCtl::Invoke(DISPID dispidMember, 
                               REFIID riid, 
                               LCID lcid,
                               WORD wFlags, 
                               DISPPARAMS* pDispParams, 
                               VARIANT* pvarResult, 
                               EXCEPINFO* pExcepInfo,
                               UINT* puArgErr)
{
   if (riid != IID_NULL)
      return DISP_E_UNKNOWNINTERFACE;
 
   if (!pDispParams)
      return DISP_E_PARAMNOTOPTIONAL;
 
   switch (dispidMember)
   {
      //
      // The parameters for this DISPID:
      // [0]: Maximum progress - VT_I4
      // [1]: Amount of total progress - VT_I4
      //
      case DISPID_PROGRESSCHANGE:
         if (pDispParams->cArgs != 0)
         {
            // Make sure that you access the
            // correct data member of the rgvarg array.
            // To do this, check the type of data to
            // make sure it is correct.
            //
            if (pDispParams->cArgs > 1
               && pDispParams->rgvarg[1].vt == VT_I4
               && pDispParams->rgvarg[0].vt == VT_I4)
            {
               if (-1 == pDispParams->rgvarg[1].lVal)
                  m_fCanBePrinted = TRUE;
            }
         }
 
         break;
 
      default:
         // Call the base class implementation of Invoke
         // so that IPrintCtl methods and properties will
         // work correctly.
         //
         IDispatchImpl<IPrintCtl, &IID_IPrintCtl, 
            &LIBID_ATLPRINTLib>::Invoke(dispidMember, riid, lcid,
                                        wFlags, pDispParams,
                                        pvarResult, pExcepInfo, puArgErr);
 
         break;
   }
 
   return S_OK;
}

在 ProgressChange 事件处理中,当Progress参数(pDispParams->rgvarg[1].lVal) 是-1, 我们设置一个变量告诉控件问打光在完成可以打印. FCanBePrinted 就是我们要设定的变量。

现在当用户试图调用Print 方法打印文档,你可以检查变量以确定是否可打印. 此处为Print 方法的代码:

STDMETHODIMP CPrintCtl::Print()
{
   if (!m_fCanBePrinted)
   {
      ::MessageBox(NULL, _T("The page is not ready to be printed."),
                   _T("PrintCtl"), MB_OK);
      return E_FAIL;
   }
 
   ATLASSERT(m_spWebBrowser);
 
   HRESULT hr = E_FAIL;
 
   if (m_spWebBrowser)
   {
      hr = m_spWebBrowser->ExecWB(OLECMDID_PRINT, 
                                  OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
   }
 
   return hr;
}

 

 

 

 

Delphi三方控件安装实战:版本核对、路径规划与ActiveX排错 在Delphi开发中,控件(Component)是构建桌面应用的核心积木。官方VCL库虽覆盖常规需求,但复杂报表、数据库直连等场景常需依赖三方控件。而‘Delphi控件版本问题导致每次进入IDE都丢失控件’、‘不能装载NTKO大文件上传控件’等高频搜索词,揭示了安装与兼容性才是真正的拦路虎。从底层原理看,控件安装本质是源码编译、BPL注册和Library路径配置的协同过程,版本不匹配或路径污染会引发IDE崩溃或组件丢失。掌握这些技术细节,能帮助开发者高效集成ODAC、Ehlib等主流组件库,并规避Activ 阅读详情

相关推荐

Delphi嵌入式浏览器控件EmbeddedWB:从IE内核到现代WebView的演进与实践

在桌面应用开发中,浏览器控件是实现原生应用与Web内容融合的关键技术组件。其核心原理是通过封装操作系统提供的浏览器渲染引擎(如IE的Trident),为应用程序提供内嵌的网页渲染与交互能力。这项技术的价值在于能够以较低成本扩展桌面应用的功能边界,实现动态内容展示、在线帮助、数据可视化等混合开发场景。随着Web技术的演进,从早期的IE内核到现代Chromium内核,浏览器控件经历了从兼容性适配到性能与标准支持全面提升的过程。本文聚焦于Delphi开发中的经典控件EmbeddedWB,深入探讨其多版本兼容性、I

chubaisheng8627的博客 432

如何对webbrowser和IE编程

  如何对webbrowser和IE编程 一、因为工作缘故,需要研究对IE编程,所以翻译了MS的有关资料,供参考。 IE的体系 WebBrowser Host首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webb

skyremember的专栏 1万+

IE WebBrowser编程技巧

WebBrowser 本WebBrowser编程技术包括Delphi、C#、VC++、VB等编程资料的集合,其中的 实例大多以Delphi为示例讲解,Delphi7 IDE开发环境。 IE_WebBrowser编程技巧 修改WebBrowser的header信息? Delphi查看WebBrowser提交之前的数据头 用TWebBrowser组件在DELPHI中POST数据和取得网页源文件 在 WebBrowser 中直接载入流,不通过文件 判断下载网页成功 WebBrowser 失去焦点问题的解决 添加到收藏夹和整理收藏夹 使WebBrowser获得焦点 提取网页中所有链接 Web字体大小 Web命令操作 WebBrowser Navigate 中的 参数 EmptyParam Web控件不缓存网页,也不从缓存中读取 禁止WebBrowser复制 CTRL+C 在WebBrowser窗口上模拟KeyBd_Event 在使用WebBrowser控件,先要 初始化和结束程序后要终止化(Initialization & Finalization) 自定义浏览器上下文菜单 自定义浏览器 C#中调用WebBrowser查看源文件的功能 ----------------------------------- WebBrowser与MSHTML 直接在WebBrowser中写HTML字符串 在webbrowser中查找字符串并定位 把图片拷贝进剪贴板 IHTMLDocument的ExecCommand 处理事件的Internet Explorer中的DOM 禁止WebBrowser右键弹出菜单 禁止TWebBrowser图像显示 访问HTML的DOM不使用WebBrowser 如何填写空白(about:blank)页的表单 屏蔽WebBrowser的Javascript 创建运行时的IHTMLDocument而不在WebBrowser内 HOOK Webbrowser 替换WebBrowser的窗口过程 Microsoft.XMLHttp的属性和方法的简介及使用 ------------------------ IE相关的 清空IE缓存 单独删除某一URL的缓存 清空历记录 读取IE历史记录 防止脚本关闭WebBrowser 连接是否有效 InternetCheckConnection res协议可以使浏览器显示储存在资源中HTML 往IE中嵌入工具条 阻断弹出式广告的BHO 自动填表的IE面板插件 使用Delphi开发IE按钮扩展 使用Delphi开发IE右键菜单扩展 IE异步可插入协议扩展 Delphi开发IE下载扩展 创建3721样式的Google搜索扩展 HTML代码过滤技术 GetDefaultBrowser 得到的HTML代码的IE窗口 下载网址wininet ------------------------------- 注意啦,需要HTF 阅读器:http://sites.google.com/site/htfresource/home

如何对webbrowser和IE编程(五)

自动化 Internet Explorer自动化打开了开发基于web应用的世界。 它允许你使用VB或者VC定制成熟的应用。自动化的好处:通过属性和方法可以改变IE的外观;你可以提供诸如导航条等用户接口以便控制用户的导航。自动化IE很容易。你建立一个简单的应用启动一个IE实例,然后使用控制webbrowser的途径- IWebBrowser2 接口来控制IE实例。提醒 术语自动化(automatio

shanhe的专栏 8395

ie事件捕获控件 捕获ie浏览器到打开链接等等的事件

ie事件捕获控件,监视浏览器到程序,ie打开窗口 提前截获 组织打开弹出窗口

拯救者R7000P(2021)装双系统Ubuntu20.04 解决联发科MT7921无线网卡在Ubuntu中不能联网

拯救者R7000P(2021)装双系统Ubuntu20.04/Ubuntu18.04 电脑配置:联想拯救者R7000P CPU:AMD R7-5800H GPU:RTX3060-6G 内存:16GB 固态:500G(原装)+500(加装) 1.做系统盘(本文以Ubuntu20.04为例) 1.下载Ubuntu20.04镜像 直接去Ubuntu官网或者一些国内的镜像去下载都可以,这里给出一个网址https://ubuntu.com/download/desktop,根据需要下载自己学要的Ubuntu版本,后缀

qq_41108639的博客 1万+

利用DIID_DWebBrowserEvents2接口接收WebBrowser事件

接收事件的途径依靠开发工具你创建客户应用程序,你可以接收事件通过不同的途径. 显然, 在Vb中接收事件同在VC中接收事件相比是如此不同和容易.在 C++ 应用中,你可以用不同的技术,通过使用 ATL, MFC, 或者标准C++.Visual Basic 中接收事件 Visual Basic是创建大多数类型应用的最轻松的工具, 所以我告诉你VB是处理事件最溶的工具时也不要惊奇. ATL 和 Vi

清风专栏 1万+

R语言clusterProfiler实战:GO与KEGG富集分析从入门到精通

本文提供了一份详尽的R语言clusterProfiler实战指南,从环境配置、数据导入、基因ID转换到GO与KEGG富集分析及可视化,手把手教你解读生物学意义。文章重点介绍了如何利用clusterProfiler这一强大工具,将差异基因列表转化为清晰的生物学通路与功能故事,并分享了结果解读、可视化以及处理非模式生物等进阶技巧与避坑指南。

weixin_29044713的博客 162

如何对webbrowser和IE编程(十一)

仅仅用于Internet Explorer的事件有些是仅仅可用于自动化 Internet Explorer,:·         OnQuit OnVisible OnToolBar OnMenuBar OnStatusBar OnFullScreen OnTheaterMode 大多数这些事件属于浏览器用户接口. 另外一些必须要先是或者关闭Internet Explorer才发生. 一些情形中,

Rehawk的专栏 1891

必看!wechat-article-exporter:轻松批量下载公众号文章

微信搜索“”关注公众号。在信息爆炸的时代,我们每天都会接触到大量优秀的微信公众号文章。有时候,我们想要将这些精彩的内容保存下来,以便日后回顾或者分享给更多的人。然而,微信公众号并没有提供直接的批量下载功能,这给我们带来了不少困扰。今天,我要给大家分享一款非常实用的软件——wechat-article-exporter,它能够帮助我们轻松地批量下载微信公众号文章,让你不再为文章的保存而烦恼。

王乐平 技术博客 4351

android HTTPS未校验服务器证书漏洞修复

上述代码是重写了域名校验的逻辑,每个证书里携带的域名是不可更改的,如果证书是合法的证书签发机构签发的,并且域名是和你要请求的域名对的上的,基本上就能确认你访问就服务器地址就是要访问的服务器地址,这样才是安全的。上述代码就是重新了证书校验的逻辑,信任所有的证书,正确的逻辑是要校验证书是否是可信任的证书签发机构所认证的,如果不校验的话你虽然是用了https加密传输,只要你的客户端用户信任了其他的证书哪怕是非法的证书,一样能够请求通过,而这个证书的服务器就可以解密你的报文,拿到你的隐私信息了。

kyzycyey的专栏 2622

Activex控件是什么?

很多朋友经常在使用浏览器浏览某些网页的时候,就会提示Activex控件被阻止,那么Activex控件到底是个什么?Activex控件被阻止会对电脑上网有影响吗? Activex控件是什么 ActiveX控件,简单的说,它就是IE浏览器的插件,例如IE的Flash播放器就是一个ActiveX控件。ActiveX存在明显的安全问题,因为它其实也是一种程序,如果安装了某个ActiveX控件,那这个控件就有权限在电脑上做很多事情,例如偷偷的监控你的网页浏览记录,在后台安装恶意程序,时不时在电脑上产生弹窗,甚至窃取帐

李利科 8214

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第一部分:AI遥感工程师的基础设施与工具链-文章 4:传统遥感分析与机器学习基线

本章将系统性地介绍经典遥感分析工作流,从数据预处理到多维度特征工程,再到如何利用经典的机器学习模型(如随机森林、支持向量机)进行监督与非监督学习。我们将通过一个完整的“智慧农业作物分类”项目实战,展示如何利用我们之前构建的数据湖和工具链,从原始数据到最终的分析结果,构建一个性能可靠、可解释性强的基线系统。更重要的是,我们将深入剖析这种传统方法的局限性,从而为后续章节引入遥感大模型的必要性提供强有力的论证。

panshengwu的博客 704

ActiveX控件容器工作原理解析

ActiveX控件容器工作原理解析。

lza_csdn2019的博客 933

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 564

让Internet Explorer成为你的软件集成平台(二):献给VB Developer

2006年11月21日 15:59:00 Microsoft Visual Basic 6.0是Microsoft的一个经典作品,尽管争议颇多,个人认为VB6是一个十分优秀的开发工具。做为一款1998年的产品,VB6至今还被许多人所喜爱,笔者就是其中之一。针对COM组件开发,VB6非常方便,但长期以来,VB6与IE插件开发却无缘无分,这一点多少有一些遗憾。作为一款建立在COM基础之上的应用

秦梦瑶的专栏 634

算法 | 基于MATLAB的增量式SVD技术综述:实现方法、代码示例与应用实践

效率提升:较传统SVD降低计算复杂度从On3O(n^3)On3至On2O(n^2)On2实时性:支持毫秒级动态数据更新资源友好:内存占用降低60%-80%[5]

尘世冰封的专栏 484

IE6升级后需要激活ActiveX控件的解决办法

微软2月28号发布的最新IE升级包在Windows Update -&gt; 可选升级包中可以找到(KB912945).直接受影响的 ActiveX 内容如下:Adobe ReaderApple QuickTime PlayerMacromedia FlashMicrosoft Windows Media PlayerReal Networks RealPlayerSun Java Virtual...

weixin_34396902的博客 164

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Internet Explorer 7 功能

Internet Explorer 7 功能浏览以下功能,以了解在 Internet Explorer 7 中对易用性、安全性和开发平台所做的改进。使日常工作更容易Internet Explorer 7 通过选项卡式浏览、工具栏右侧的 Web 搜索、高级打印、轻松查找、阅读和订阅 RSS 订阅源等功能提供了改进的导航功能。 单击这些功能以了解更多信息。简化用户体验Internet Explorer...

weixin_33923762的博客 151

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

利用Delphi编写IE扩展

就是如何使IE扩展组件可以响应事件。    在自己的程序中使用过WebBrowser控件的朋友都知道,WebBrowser控件定义了诸如BeforeNavigate、DownloadComplete 等事件,我们可以通过编写事件处理代码实现对WebBrowser控件的操作。那么如何实现对IE的事件响应和处理呢?同建立IE面板一样。我们需要建立一个实现IObjectWithSite接口的COM组件,...

weixin_34128839的博客 211

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IE的体系和webrowser

IE的体系 WebBrowser Host首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。应用程序必须是可容纳activex控件的容器。Webbrowser control既是active...

weixin_34194317的博客 122
上一篇: CAB制作说明
下一篇: cocos2dx 在Vs2010编译问题解决
SevenColorFish
博客等级 码龄22年 53粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值