摘要:这三个参数都是告诉编译器参数的传递约定,参数的传递约定是指参数的传递顺序(从左到右还是从右到左)和由谁来恢复堆栈指针(调用者或者是被调用者),在 Win16下有两种约定: C 和 PASCAL。 C约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。 PASCAL约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。 STDCALL是C约定和PASCAL约定的混合体,它规定参数的传递是从右到左, 恢复堆栈的工作交由被调用者完成。Win32只用STDCALL约定, 但除了一个特例, 即: wsprintf。 __stdcall 这是一种函数调用方式。 _.
阅读全文
随笔分类 - C++/C
摘要:调试策略第一章 调试的过程1. 成功而高效的调试的关键是找到准确的错误信息2. 一旦找到一个错误,就可能找到更多。类似的代码可能还有类似的错误3. 从错误中学习如何预防将来会产生的错误4. 对于新代码,根本不需要执行测试来判断它是否有错误第二章 编写便于调试的C++代码C++语言和编程风格1. 在需要的时候使用语言的高级特性2. 要写出能被“人”理解的代码,不仅是编译器3. 慎用匈牙利命名法4. 每一个语句行都应该作为一个单独的原子单位,这样可以充分利用调试工具5. 如果你不能确定是否需要括号,那么就需要括号6. 使用C++自身特性防止错误的方法:用const代替#define来创建常量;用e
阅读全文
摘要:VS2005设置可以在Release模式下调试 一、首先:从“配置管理器”中将项目配置成Release版:在下拉列表中选择了Release后,点击“关闭”即可。 见图-1 。二、按Alt+F7:进入当前项目的属性设置:经过上面的设置,应该是“活动(Release)”,然后按下面的三个图示分别设置: 见图-2, 图-3, 图-4,OK! 可以在Release版中进行调试了。
阅读全文
摘要:如何在对话框中实现文件拖放功能在对话框上添加一个Picture Control,然后把Accept Files属性修改成True。如果是想托图片的话需要把Type改成Bitmap。在头文件里加入:afx_msg void OnDropFiles(HDROP hDropInfo);在cpp文件里加入:ON_WM_DROPFILES()在OnInitDialog()的最后加入:DragAcceptFiles(TRUE);在cpp文件里添加:void CTestDragDlg::OnDropFiles(HDROP hDropInfo){ int nFileCount = DragQueryFil..
阅读全文
摘要:所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。一、预编译头文件说明所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectn
阅读全文
摘要:从microsoft网站上找到关于#include Directive (C/C++)的相关问题解释如下:The#includedirective tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears.Syntax FormActionQuoted formThe preprocessor searches for includ
阅读全文
摘要:1.MessageBox("这是一个最简单的消息框!");2.MessageBox("这是一个有标题的消息框!","标题");3.MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL );4.MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );5.MessageBox("这是一个两种属性的消息框!","标题", MB_ICONE
阅读全文
摘要:[转]#ifndef#define#endif的用法(整理) 原作者:icwk 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef <标识> #define <标识> ...... ...... #endif <标识>在理论上来说可以是自由命名的,但每
阅读全文
摘要:C++ 调用.lib的方法:一: 隐式的加载时链接,有三种方法 1 LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。 2 设置工程的 Project Settings来加载DLL的LIB文件 打开工程的 Project Settings菜单,选中Link,然后在Object/li
阅读全文
摘要:最近参与了一个项目,我的同事在开发一个ActiveX对象,我帮他编写JS脚本来调用这个对象,其中碰到蛮多问题,最难的就是如何响应由ActiveX对象返回的对象事件。正好,现在一起总结一下。 首先,我来介绍一下COM组件,以便说明js如何响应 COM组件 方法:voidinit()//初始化对象 Project createProject()//创建一个Project类型的对象并返回 事件: onInit( int_code )//当init成功后触发 Project类的结构: 方法:voidinit()//初始化Project对象 事件: onInit( int_code )//当init成功
阅读全文
摘要:1:创建ActiveX对象在web中使用ActiveX组件有两种方法,一是如下rep_print_medcan.CABOBJECT标签中,通过ID指点了对象的ID号,javascript可以使用该ID号来引用该对象,而classid用于标识这个组件,每个ActiveX组件都有唯一一个用于表示他的ID号。而codebase指定的程序下载到本地(在系统目录的“DownloadedProgramFiles”子目录下),然后调用组件程序的自注册入口函数注册到当前系统中,以后的创建都在本地进行,不再涉及codebase属性使用以上的方法来创建ActiveX对象,有些参数设置需要手抖的填写,麻烦,2、另外
阅读全文
摘要:MFC Activex与JavaScript的接口交互在Activex的应用中与网页的JavaScript的交互必不可少,在这里就简单的介绍下。VC 创建的Activex的有两种类型,MFC Activex与ATL Activex, 在VC新建工程的时候选择,这篇文章介绍的是针对MFC Activex的,ATL Activex可以绕过了。测试环境:: VC++ 6.0 SP6(一) MFC Activex与JavaScript的传递参数、返回值在JavaScript调用时Activex方法,可以归分为两种:1参数为整型变量,返回为整型变量long CActivexCtrl::Func(long
阅读全文
摘要:1.向ActiveX注册JS函数:在ActiveX中添加接口方法 - void RegisterFunction(BSTR bstrFuncName, IDispatch* dispFunc);JavaScript代码声明一个函数,并调用RegisterFunction接口向ActiveX注册该函数,供ActiveX调用。2.保存注册的函数,ActiveX使用CComDispatchDriver对象保存注册的JS函数(IDispatch接口指针)CComDispatchDriverm_Func1;void RegisterFunction(BSTR bstrFuncName, IDispatc
阅读全文
摘要:4.实现从ActiveX调用网页中的javascript.设计思路:从上述项目中产生的calc.html中创建一个js函数来调用控件的CallWebJs方法,而CallWebJs方法又调用页面中的js方法printMsg();具体操作如下:同3中的做法,再为控件添加一个方法命名为CallWebJs,在calc.cpp中找到该方法,并实现如下:STDMETHODIMP Ccalc::CallWebJs(VARIANT scriptCallback){// TODO: Add your implementation code hereCComPtr<IDispatch> spCallb
阅读全文
摘要:1. 打开VS2008,单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“ATLtest”。在随后出现的项目向导中,使用默认配置即可。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />2. 添加控件在解决方案管理器中的项目上右击,依次选择“A
阅读全文
摘要:本文描述了使用ATL开发一个ActiveX控件的完整过程。一、创建项目单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“Calculator”。在随后出现的项目向导中,使用默认配置即可。 二、添加控件在解决方案管理器中的项目上右击,依次选择“Add”、“Class”,在添加类对话框中选择ATL分类下的ATL Control类型。单击“Add”按钮,将会出现添加ATL Control向导。 在向导的第二步中,将接口类型选择为“Dual”,为控件支持事件做为准备,在Support选项中,选中“Connection points”复选框。.
阅读全文
摘要:之前写过文章通过自定义函数来实现ActiveX回调JS中的函数,最近在网上发现一更简洁的方法,通过事件触发,在这里小结一下,为使内容连贯,请参考我之前的《一步一步实现ATL开发的ActiveX组件与javascript的交互》系列文章http://hi.baidu.com/hwygy_001/blog/item/21ec5bc5294f64bd8326ac72.html:1.如果使用的是VS2010,则在Class View窗口中右击_ICalcEvents接口,依次选择“Add”、“Add Method…”,根据添加方法向导添加AddCompleted方法,如下图所示:若采用的VS2008,
阅读全文
摘要:1.在COM组件中调用JavaScript函数// 连接点方式页面javascript脚本<object classid="CLSID:B568F111-DFE4-4944-B67F-0728AB2AB30F" id="testCom" VIEWASTEXT></object><script language="JavaScript" for="testCom" event="staTe(s)"> alert("State(" + s +
阅读全文
摘要:JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org/,本文不再对json做介绍,将重点介绍c++的json解析库的使用方法。json官网上列出了各种语言对应的json解析库,作者仅介绍自己使用过的两种C++的json解析库:jsoncpp(v0.5.0)和Boost(v1.34.0)。一. 使用jsoncpp解析jsonJsoncpp是个跨平台的开源库,首先从http://jsoncpp.sourceforge.net/上下载jsoncpp库源码,我下载的是v0.5.0,压缩包大约107K,解
阅读全文
摘要:目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。 静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。 动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链
阅读全文