VC6.0控件注册新方法
VC6.0中控件及按钮的设置和使用
VC6.0中控件及按钮的设置和使用VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE ); //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW ); //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。
VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(50,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ) ; //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
VC6.0安装说明
如何在win7下正确安装VC6.0。
安装完成后,还需要打补丁,在文章最后给出。
注意,安装过程和使用过程会出现如下“程序兼容助手”提示,一定要勾选“不再显示此消息”,然后单击“运行程序”。
以后运行过程如果出现这个提示,还是这样选择,不会影响使用的。
安装步骤1) 解压下载的压缩文件,进入文件夹,双击SETUP.EXE 进行安装。
如下图所示:2) 点击“下一步”继续安装,遇到填写“产品号和用户ID”,忽略或者保持默认,不用理会,继续“下一步”。
如下图所示:3) 接下来是安装选项,选择“安装Visual C++ 6.0中文企业版”。
如下图所示:4) 下面是安装方式,一定要选择Custom(自定义安装),这是解决win7兼容性问题的关键。
如下图所示:5) 弹出组件选择对话框,选中“Tools”,点击“更改选项”。
6) 把“OLE/COM Object Viewer”选项去掉,点击“确定”。
OLE/COM Object Viewer是对象查看器,它与win7不兼容,去掉后不影响任何编程操作。
7) 接下来问你要不要注册环境变量,选择是,以后会用到这里的环境变量。
8) 遇到下面的提示,选择“是”。
9) 遇到下面的提示,选择“是”。
8) 接下来,会提示安装MSDN。
MSDN是微软提供的帮助文档,我们提供安装包没有带,选择“退出”,不要安装。
9) 点击“是”,完成安装。
打补丁再强调一遍,VC6.0对win7的支持,必须要在安装时正确设置,安装完成后还要打补丁。
您在安装VC6.0后可能会出现以下兼容性问题:VC打不开文件和工程,总是提示读取内存错误,程序停止运行,点“确定”后VC自动关闭,但VC却能新建文件和工程。
这让许多人困惑,以为是VC版本问题,再下载再安装,即便打了补丁,问题仍然存在。
其实这是微软公司一个小小的失误,Visual C++6.0与Office2007有冲突。
解决这个问题,还是要打补丁(这是微软的补救措施)。
VC++6.0使用说明
Microsoft Visual c++的入门解剖1.打开Micro soft Visual c++ 6.0可看到时2.点击“Close”,之后点击菜单栏的“File”中的“New”出现对话框先选中倒数第三个选项“Win32 Console Application”,然后在“Project name”中建立一个工程名(一般已自己名字命名)。
请留心,这是存放你的文件的路径。
3.点击OK后出现点击Finish->OK直到完成,这时已经建立了一个属于你的工程. 4.接下来再建立一个文件,再次点击菜单栏的New选项出现选中第五个选项“C++ Source File”,然后在File中输入文件名(命名规则见附录)。
5.最后就可以写程序了6.编完程序之后,点击工具栏的,将出现对话框,请一直点击“是”,将出现7.那么在点击中的红色感叹号,则出现8.若出现的是,可按F4键进行纠错请注意:1.不要同时开两个程序,这样会导致程序的运行出现错误。
2.若出现无法关闭Visual 6.0时,可在范围内单击右键出现资源管理器(或按Ctrl+Alt+Delete)结束.附录:1.程序命名:程序名字中不要出现中文命名规则:用自己名字拼音首字母+程序来源(或程序含义)例如:张三写的书本上的例4.4程序用ZS_exam4_4来命名例如:李四写的习题2.3的程序用LS_exer2_3来命名2.写好的程序保存起来将自己写过的程序保存起来,放到ftp上,方法如下:打开任意文件夹->输入"ftp://172.16.108.151/"->进入“09级”新建一个以自己名字命名的文件夹然后把自己写过的如ZS_exma4_4.cpp的程序复制进去。
3.文档的保存将学习总结,电子作业都存入ftp中.。
使用VC6.0创建工程
使用Microsoft Visual C++ 6.0
VC6程序开发的结构:
每次开发必须有一个workspace
一个workspace可以包含多个project
porject即工程,工程可以生成可执行文件(exe), 静态链接库(lib)和动态链接库(dll)以及其他一些 类型的程序文件
一个Project可以包含多个头文件(*.h)和实现文件(*.c), 不过整个工程至多只能有一个main函数
14
使用Microsoft Visual C++ 6.0
WorkSpace Project
.h .C .C ... Project
WorkSpace Project .c
工程唯一的main函数
15
使用Microsoft Visual C++ 6.0
对于大型程序的开发,把所有的代码放入 一个c文件显然是不合适的,VC++6.0的工 程管理结构可以帮助开发人员把大型程序 分散为多个逻辑部分,以便管理
.h----- 这种文件为头文件,包含的主要是 自定义数据类型、函数等的定义和声明放 置在头文件中。 .c----- 代码实现文件。
10
在VC++6.0中
.dsw---- Developer Studio Workspace,最高级别的配置 文件,记录了整个工作空间的配置信息,是一个纯文本 的文件,在vc创建新项目的时候自动生成。 .dsp---- VC开发环境生成的工程文件,文本格式。在VC 中,应用程序是以Project的形式存在的,Project文件的 扩展名为.dsp,在Workspace文件中可以包含多个Project, 由Workspace文件对它们进行统一的协调和管理,每个 工程都对应一个dsp文件。 .opt---- VC开发环境自动生成的用来存放WorkSpace中各 种选项的文件。工程关于开发环境的参数文件。如工具 条位置信息等。 .ncb----无编译浏览文件(no compile browser), NCB为 VC++自动创建的跟踪文件,其中存放了供ClassView、 WizardBar和Component Gallery使用的信息,由VC开发 环境自动生成。无编译浏览文件。当自动完成功能出问 题时可以删除此文件。build编译工程后会自动生成。
VC6.0添加CMSComm控件的几个问题
当添加1不能添加时:
窗口----->右击鼠标----->Insert Active Controls------->Microsoft Communications Control,version 6.0------->之后手动添加.app及.h文件;
手动添加.app及.h文件: Ctrl+W 打开类项导---->Member Variables --->Add Variable --->OK。
>>> You should call it in your app's InitInstance function.
在其app::InitInstance()中加入AfxEnableControlContainer()
经过1or2后编译后按f5调试运行程运行不起来自动关闭并出现如下错误
VC6.0添加CMSComm控件的几个问题
1、添加1:
Project--->Add To project--->Components and Controls--------->Microsoft visual Studio/common/msdev98/gallery/Registered ActiveX Controls--------->Microsoft Communications Control,version 6.0------->之后自动添加.app及.h文件----->OK。
3、在app::InitInstance()中加入AfxEnableControlContainer()
经过1or2后,编译后,按F5调试运行,程序运行不起来,自动关闭并出现如下错误:
vc6.0安装教程与调试技巧
vc6.0安装教程与调试技巧vc6.0的安装过程1.首先解压安装文件的压缩包2.然后再选择安装的版本,VC6CN 表示的是中文版,VC6EN表示英文版。
3.打开VC6CN文件夹,其中有如下图标,鼠标双击。
4.如下图所示就是我们安装的第一步,单击下一步。
5.选择“接受协议”后单击下一步。
6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。
7.选择“安装visual c++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。
8.单击下一步。
9.如下界面,单击“继续”,开始安装软件。
10.点击“确定”。
11.选择“是”,继续安装。
12.选择“typical”继续安装13.选择“ok”。
14.选择“确定”15.选择“确定”16.取消“安装MSDN”前面的勾号,选择“退出”。
17.选择“是”,取消MSDN的安装。
18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“Microsoft Visual C++ 6.0”目录中选择“Microsoft Visual C++6.0”就可以运行程序了。
也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。
调试技巧调试程序可以帮助的了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release 状态。
“C/C++”标签页中的Category选General,Optimizations 选Disable(Debug),Debug info选Program Database。
在“Link”标签页中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
VC++6.0操作简介
VC++6.0操作简介一、 VC++6.0VC++6.0二、 VC++6.0环境的基本操作1. 建立应用程序操作步骤如下:(1) 关闭 当前工作区:【文件】→【关闭 工作区】 (必要时)(2) 建立工程:【文件】→【新建】(出现“新建”对话框)在“新建”对话框中选中“工程”选项卡→选中其中的“Win32 Console Application”项→选择存储“位置”→输入工程名→单击“确定”按钮(出现“Win32Console Application”对话框)在“Win32 Console Application”对话框中选择“An empty project”选项→单击“完成”按钮注意:在操作过程中,如果出现提示性对话框,可根据具体情况按“确定”或“取消”按钮。
至此,一个新的工程已经建立,接下来,可以在该工程中建立文件或(和)将已经存在的文件添加到工程中:在工程中新建文件:【工程】→【添加工程】→【新建】(出现“新建”对话框)在“新建”对话框中选中“文件”选项卡→选中其中的“C++ Source File”或者“C/C++ Header File”项→选择新建的置(目录)→输入文件名→单击“确定”按钮→输入文件内容。
例如,新建的名为M1.cpp的源文件内容如下:向工程中添加文件【工程】→【添加工程】→【Files…】(出现“插入文件到工程”对话框)在“插入文件到工程”对话框中选中要插入的文件→选择文件要插入的工程(插入到)→单击“确定”按钮2.编辑文件操作步骤如下:在“工作区”窗口中选择“FileView”选项卡→展开相应工程的文件分支(工程名files)→双击类要编辑的文件名(此时,相应文件的内容已经显示在编辑窗口中)→对文件进行编辑3.编译、构建与运行应用程序编译源文件:在“工作区”窗口选择“FileView”选项卡→选择要编译的源文件→【编译】→【编译xx】构建可执行文件:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【构建xx.exe】运行应用程序:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【执行xx.exe】4.在工程中新建类(1)新建类:设置活动工程(工作区中有多个工程时需要此步)。
vc6.0使用教程详解.pptx
8
学海无 涯
在双击工程文件,在这里是 777.files,可以看到该工程的包含的文件
: 其中,Source Files 为包含所有工程的源文件 Header Files 为包含所有工程的头文件 在源文件选项“Source Files ”,右键单击中的“添加目录到工程”,添加你 要打开的扩展名为 .cpp 的源文件。在头文件选项“ Header Files”,右键单 击中的“添加目录到工程”,添加你要打开的扩展名为 . h 的头文件。添加完 你所有的头文件和源文件之后,检查一下是否添加完毕,之后就可以编译了。
5
学海无涯 在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选
择 Win32 Console Application(控制台应用程序) ,在填写工程名称,选择一个 程学海无 涯 在点击“确定”,就建立一个简单的工程了。
7
学海无 涯 再点击左边的工程信息右下角的“FileView”选项;
学海无涯 你首先要打开 VC6.0 界面,一般用得较多的是 Win32 控制台应用程序(源程序, 扩展名.cpp), 步骤是:(先工程—后文件—编译—连接---运行) 1,建立一个工程,“文件”——“新建”,出现下面界面:
选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命 名工程名称,选择保存位置,
进入编辑区,在主界面编写代码:如下编写完之后呢:
4
学海无 涯
可以按编译按钮 调试程序,看看有没有错误,有的话改正,没有的话就可以 再按连接按钮 检查连接(多文件工程时常用,检查文件间是否正常连接), 最后,点运行按钮 ,就可以运行了。 如果是您有代码如:cpp 文件,或 .h 文件,想添加都 VC6.0 里来测试的话,可 以这样做: 首先,要理解一下 文件扩展名为:cpp 和.h 文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个 程序中常用到的结构体,频繁使用的函数说明,定义等等; 文件扩张名为,cpp 的,是 C++中的源文件,也是最常用到的文件,每建立一个 工程都要至少一个源文件(至少要有一个函数入口——主函数 main() ),包含 了核心代码; 建立与运行说明:(以 VC 6.0 编译器为例,其他编译器类似) 首先,打开 VC 6.0 编译环境;
VC6创建ocx工程的步骤
1、新建工程。
选择MFC Activex ControlWizard。
默认点击完成。
2、按Ctrl+W,出现建立向导,点击automation选项卡,点击Add Method。
添加函数3、输入函数名,函数返回值,函数参数。
即完成函数添加。
4、在工程cpp类中,加入以下代码,确保页面调用能正常#include "comcat.h"//页面安全const CATID CATID_SafeForScripting ={0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};const CATID CATID_SafeForInitializing ={0x7dd95802,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};////////////////////////////////////////////////////////////////////////////// CV oiceApp::InitInstance - DLL initialization// 创建组件种类HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription){ICatRegister* pcr = NULL;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (FAILED(hr))return hr; // Make sure the HKCR\Component Categories\{..catid} // key is registered.CA TEGORYINFO catinfo;catinfo.catid = catid;catinfo.lcid = 0x0409 ; // english// Make sure the provided description is not too long.// Only copy the first 127 characters if it is.int len = wcslen(catDescription);if (len>127)len = 127;wcsncpy(catinfo.szDescription, catDescription, len);// Make sure the description is null terminated.catinfo.szDescription[len] = '\0';hr = pcr->RegisterCategories(1, &catinfo);pcr->Release();return hr;}// 注册组件种类HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CA TID catid){// Register your component categories information.ICatRegister* pcr = NULL ;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (SUCCEEDED(hr)){// Register this category as being implemented by the class.CATID rgcatid[1] ;rgcatid[0] = catid;hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);}if (pcr != NULL)pcr->Release();return hr;}// 卸载组件种类HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CA TID catid){ICatRegister* pcr = NULL ;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (SUCCEEDED(hr)){// Unregister this category as being implemented by the class.CATID rgcatid[1] ;rgcatid[0] = catid;hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);}if (pcr != NULL)pcr->Release();return hr;}5.在cpp类中修改下面这两个函数:STDAPI DllRegisterServer(void){HRESULT hr = S_OK ;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))return ResultFromScode(SELFREG_E_CLASS);// 标记控件初始化安全.// 创建初始化安全组件种类hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");if (FAILED(hr))return hr;// 注册初始化安全hr = RegisterCLSIDInCategory(_tlid, CATID_SafeForInitializing);if (FAILED(hr))return hr;// 标记控件脚本安全// 创建脚本安全组件种类hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");if (FAILED(hr))return hr;// 注册脚本安全组件种类hr = RegisterCLSIDInCategory(_tlid, CATID_SafeForScripting);if (FAILED(hr))return hr;return NOERROR;}/////////////////////////////////////////////////////////////////////////////// DllUnregisterServer - Removes entries from the system registrySTDAPI DllUnregisterServer(void){HRESULT hr = S_OK ;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))return ResultFromScode(SELFREG_E_CLASS);// 删除控件初始化安全入口.hr=UnRegisterCLSIDInCategory(_tlid, CATID_SafeForInitializing);if (FAILED(hr))return hr;// 删除控件脚本安全入口hr=UnRegisterCLSIDInCategory(_tlid, CATID_SafeForScripting);if (FAILED(hr))return hr;return NOERROR;}6. 在ctrl.cpp类中加入如下代码(IMPLEMENT_OLECTLTYPE(CNetV oiceCtrl, IDS_NETVOICE, _dwNetV oiceOleMisc) 后面加入)////////////------------------------------------------------BEGIN_INTERFACE_MAP( CNetV oiceCtrl, COleControl )INTERFACE_PART(CNetV oiceCtrl, IID_IObjectSafety, ObjSafe)END_INTERFACE_MAP()//.............................................................................// IObjectSafety member functions// Delegate AddRef, Release, QueryInterfaceULONG FAR EXPORT CNetV oiceCtrl::XObjSafe::AddRef(){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return pThis->ExternalAddRef();}ULONG FAR EXPORT CNetV oiceCtrl::XObjSafe::Release(){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return pThis->ExternalRelease();}HRESULT FAR EXPORT CNetV oiceCtrl::XObjSafe::QueryInterface( REFIID iid, void FAR* FAR* ppvObj){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj); }const DWORD dwSupportedBits =INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;const DWORD dwNotSupportedBits = ~dwSupportedBits;//.............................................................................// CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions// Allows container to query what interfaces are safe for what. We're// optimizing significantly by ignoring which interface the caller is// asking for.HRESULT STDMETHODCALLTYPECNetV oiceCtrl::XObjSafe::GetInterfaceSafetyOptions(/* [in] */ REFIID riid,/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions) {METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)HRESULT retval = ResultFromScode(S_OK);// does interface exist?IUnknown FAR* punkInterface;retval = pThis->ExternalQueryInterface(&riid,(void * *)&punkInterface);if (retval != E_NOINTERFACE) { // interface exists punkInterface->Release(); // release it--just checking!}// we support both kinds of safety and have always both set,// regardless of interface*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits;return retval; // E_NOINTERFACE if QI failed}/////////////////////////////////////////////////////////////////////////////// CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions// Since we're always safe, this is a no-brainer--but we do check to make // sure the interface requested exists and that the options we're asked to // set exist and are set on (we don't support unsafe mode).HRESULT STDMETHODCALLTYPECNetVoiceCtrl::XObjSafe::SetInterfaceSafetyOptions(/* [in] */ REFIID riid,/* [in] */ DWORD dwOptionSetMask,/* [in] */ DWORD dwEnabledOptions){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)// does interface exist?IUnknown FAR* punkInterface;pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);if (punkInterface) { // interface existspunkInterface->Release(); // release it--just checking!}else { // interface doesn't existreturn ResultFromScode(E_NOINTERFACE);}// can't set bits we don't supportif (dwOptionSetMask & dwNotSupportedBits) {return ResultFromScode(E_FAIL);}// can't set bits we do support to zerodwEnabledOptions &= dwSupportedBits;// (we already know there are no extra bits in mask )if ((dwOptionSetMask & dwEnabledOptions) !=dwOptionSetMask) {return ResultFromScode(E_FAIL);}// don't need to change anything since we're always safereturn ResultFromScode(S_OK);}7. 在ctrl.h中加入以下代码:#include <objsafe.h>DECLARE_INTERFACE_MAP()BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (/* [in] */ REFIID riid,/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions);STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (/* [in] */ REFIID riid,/* [in] */ DWORD dwOptionSetMask,/* [in] */ DWORD dwEnabledOptions);END_INTERFACE_PART(ObjSafe);8.页面代码中,添加如下代码:<objectid="NetV oice"codebase="NetV oice.ocx"classid="clsid:439A1200-A72F-48A5-970D-64EFD9192613"></object>。
vc6.0安装教程与调试技巧
vc6.0的安装过程1.首先解压安装文件的压缩包2.然后再选择安装的版本,VC6CN 表示的是中文版,VC6EN表示英文版。
3.打开VC6CN文件夹,其中有如下图标,鼠标双击。
4.如下图所示就是我们安装的第一步,单击下一步。
5.选择“接受协议”后单击下一步。
6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。
7.选择“安装visual c++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。
8.单击下一步。
9.如下界面,单击“继续”,开始安装软件。
10.点击“确定”。
11.选择“是”,继续安装。
12.选择“typical”继续安装13.选择“ok”。
14.选择“确定”15.选择“确定”16.取消“安装MSDN”前面的勾号,选择“退出”。
17.选择“是”,取消MSDN的安装。
18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“Microsoft Visual C++ 6.0”目录中选择“Microsoft Visual C++ 6.0”就可以运行程序了。
也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。
调试技巧调试程序可以帮助的了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release状态。
“C/C++”标签页中的Category选General,Optimizations选Disable(Debug),Debug info选Program Database。
在“Link”标签页中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
