在下面的帖子里看到这些问题,很少有会的.羞愧难当,高手们,谁会这写问题,
拣会的回答吧.我会好好学习的.
拣会的回答吧.我会好好学习的.
解决方案 »
- 如何使播放器播放界面可与窗口一起变化
- 消息如何过滤要怎么实现??
- 在VC中用ado封装类查询带BLOB字段的表时出错,怎么处理呢?
- 谁有子视图左边为QQ抽屉菜单,右为datagrid控件这样的多文档程序,拜托给给传一个
- 如何在MFC的CHtmlView中保存一个已经打开的页面?
- 在VC中如何具体实现二进制文件的读
- 请教各位高手:在MDI中的一个View内如何知道它自己是最小化了的?IsIcon..试过不行。
- 用atl开发office addin时是否可以自动完成编码的转换成unicode
- DDK 和 WDK 的区别
- 瞧一瞧看一看,技术书籍大甩卖了!!!
- 哪里有讲解如何编写email服务器端程序的资料?
- 关于FTP的问题
2。现在需要一个指针,这个指针指向某个类的某个非静态成员函数,C++怎么声明这个指针?怎么对其赋值?如果是指向非静态成员变量又如何?
3。为什么在switch语句中,如果在某个case下面写int i=1;会出错,而写成int i; i=1;却会编译通过?
4。386+ CPU中的通用寄存器有eax、ebx、ecx、edx、esi、edi、esp和ebp。调用Windows API时,这其中哪几个寄存器的值不会被修改?
5。某些成员函数的声明后往往加有const,这是什么意思?
6。为什么在使用类对象作为函数参数时,往往选择使用引用或指针,而不是像简单变量那样直接传值?
7。为什么构造函数不能重载,而析构函数往往都是虚函数?
8。类B和类C都是由类A继承而来,而类D是由类B和类C双重继承而来。那么类D的实例中将有几个类A的实例?如果有两个,现在要引用其中一个,C++如何表达?
9。什么叫upcast,什么叫downcast?什么叫RTTI?试着写一个程序用到typeid、static_cast、dynamic_cast这些C++运算符。
10。MFC的RTTI与标准C++的RTTI实现有什么不同?CRuntimeClass是做什么用的?
11。VC中C++标准的try-catch语法与微软扩展的__try、__except、__finally语法有什么不一样?使用异常处理的C++反汇编代码中经常有“mov eax, fs:[0]”这样的语句,那么fs:[0]处是什么东西?与异常处理有什么关系?
12。SEH是怎么实现的?现在Windows平台下的C++编译器实现try-catch时是否用到了SEH?
13。MFC程序的流程如何?程序从CRT的_WinMainCRTStartup开始执行后,是怎么跳到最后的CWinApp::InitInstance、CWinApp::Run的?
14。请仔细阅读MFC关于窗口创建部分的代码,MFC为什么要在窗口创建时安装一个WH_CBT类型的钩子?MFC是怎么对消息处理的?窗口过程是如何将一个消息发送到某个C++类的成员函数这里的?为什么像CDocument这样的类,并没有任何窗口与之关联,依然能收到WM_COMMAND之类的消息?
15。为什么CSocket不能在线程之间传递?还有哪些MFC类不能在线程之间传递?
16。你现在有一个工程,你希望拿到别的机器上继续开发,那么只需要将工程目录下的哪些文件复制即可?你想开发一个程序,使其可以脱离MFC和CRT的运行时动态链接库独立运行,你需要如何更改工程设置?你会使用VC的工具Dependency Walker检察某个可执行模块(EXE或DLL)是否依赖于MFC和CRT动态链接库吗?
17。试着将#include "StdAfx.h"从cpp文件中去掉,如何修改工程设置,才可以使其依然照常编译?你用过Batch Build、Custom Build、Custom AppWizard这些功能吗?
18。利用嵌入汇编写一个__declspec(naked)的函数,使用stdcall调用规则,传入2个DWORD参数,并返回一个DWORD值。调用这个函数,希望不要出现堆栈错误。
19。什么叫内核对象?什么叫User对象?什么叫GDI对象?可以对一个GDI对象使用DuplicateHandle复制吗?User对象可不可以被子进程继承?
20。Windows是不是使用LDT(Local Descriptor Table)来实现进程保护的?选择器、线性地址、虚拟地址、物理地址都是什么意思?写一个程序尝试分别使用LocalXXX/GlobalXXX、HeapXXX和VirtualXXX函数使用内存,它们有什么不同?
21。写一个Ping程序;写一个支持FTP与HTTP的下载程序。
22。做一个可以被VB调用的DLL。
23。利用Automation驱动Word打开一篇文档;利用ATL做一个ActiveX控件,可以在浏览器上显示当前系统时间。
24。利用CRecordset写一个操作Access数据库的程序。然后利用ADO(可以使用MFC、ATL或者纯粹的API实现)写一个调用SQL Server存储过程的程序。
25。利用Multimedia API做一个简单的媒体播放机,可以播放CD、VCD、MP3等。
26。用Direct3D和OpenGL分别做一个旋转的正方体,当然,OpenGL版的最好做成屏幕保护程序。
27。分别写程序演示Windows 98下的Flat Thunk机制和NT下的General Thunk机制。
28。VC连接器生成的PE格式可执行文件都是以0x1000作为file alignment的。而Borland的连接器可以选择不同的file alignment。较小的file alignment可以缩小可执行文件的尺寸。Windows 98中,file alignment的最小合法值为512,而NT中还可以更小。写一个程序用来对编译好的PE执行文件的file alignment进行调整。当然,条件是这个程序依然能够正常执行。
29。写一段代码,实现在Windows 98下直接从Ring3跳入Ring0。
30。写一个程序,执行完后自己将自己从磁盘上删除。
2。现在需要一个指针,这个指针指向某个类的某个非静态成员函数,C++怎么声明这个指针?怎么对其赋值?如果是指向非静态成员变量又如何?
好象是c++之父编写的c++ programming的习题.3。为什么在switch语句中,如果在某个case下面写int i=1;会出错,而写成int i; i=1;却会编译通过?以前碰到过,莫名其妙.4。386+ CPU中的通用寄存器有eax、ebx、ecx、edx、esi、edi、esp和ebp。调用Windows API时,这其中哪几个寄存器的值不会被修改?根本不会.6。为什么在使用类对象作为函数参数时,往往选择使用引用或指针,而不是像简单变量那样直接传值?省去了大量数据的传递,我会,对否?7。为什么构造函数不能重载,而析构函数往往都是虚函数?我觉得构造函数可以重载啊.重新编一个就可以啊.至于析构函数往往都是虚函数,为什么?是不是一般用户必须重载,因为到底需要析构哪些东东往往不固定.11。VC中C++标准的try-catch语法与微软扩展的__try、__except、__finally语法有什么不一样?使用异常处理的C++反汇编代码中经常有“mov eax, fs:[0]”这样的语句,那么fs:[0]处是什么东西?与异常处理有什么关系?根本不会.15。为什么CSocket不能在线程之间传递?还有哪些MFC类不能在线程之间传递?曾经碰到过这个问题.不知所以然.17。试着将#include "StdAfx.h"从cpp文件中去掉,如何修改工程设置,才可以使其依然照常编译?不会.30。写一个程序,执行完后自己将自己从磁盘上删除。不会.
you can understand the question all
2: 成员变量:应该是type classname::* p.
3: 不知是不是编译器的原因
4: 不知道。
5: const member functions 是为了指明哪个member funtions 可由const对象调用。
6: 因为效率问题。
7: 因为构造函数是构造不同的class当然不能重载了。
析构函数一般是在BASE class 是虚函数,
原因是为了更好的进行多态析构处理。
8: 如果不是虚拟继承就是两个实体,反之就是一个。
9: 我只知道RTTI是运行时类型识别。
10:MFC的RTTI主要是由”宏“构成的,而C++标准的RTTI主要是由“虚函数”构成的。
小弟愚见。其他的多数不会:)
9、答:RTTI代表运行期识别 即Runtime type information 好象是这样
16、去掉debug目录、realease目录
//////////////////////////////Creamdog/////////////////////////////To小红帽:
你的方法是很不好的,可以说完全达不到要求下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码.
这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了.
int main(int argc, char *argv[])
{
HMODULE module = GetModuleHandle(0);
CHAR buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof buf);
CloseHandle(HANDLE(4));
__asm {
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}
现在,我们先看一下堆栈中的东西 偏移 内容
24 0
20 0
16 offset buf
12 address of ExitProcess
8 module
4 address of DeleteFile
0 address of UnmapViewOfFile 调用RET返回到了UnmapViewOfFile,也就是栈里的偏移0所指的地方.当进入UnmapViewOfFile的流程时,栈里见到的是返回地址DeleteFile和HMODUL module.也就是说调用完毕后返回到了DeleteFile的入口地址.当返回到DeleteFile时,看到了ExitProcess的地址,也就是返回地址.和参数EAX,而EAX则是buffer.buffer存的是EXE的文件名.由GetModuleFileName(module, buf, sizeof buf)返回得到.执行了DeleteFile后,就返回到了ExitProcess的函数入口.并且参数为0而返回地址也是0.0是个非法地址.如果返回到地址0则会出错.而调用ExitProcess则应该不会返回.
这段代码的精妙之处在于:
1.如果有文件的HANDLE打开,文件删除就会失败,所以,CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4是OS的硬编码,对应于EXE的IMAGE.在缺省情况下,OS假定没有任何调用会关闭IMAGE SECTION的HANDLE,而现在,该HANDLE被关闭了.删除文件就解除了文件对应的一个句柄.
2.由于UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE,而且解除了IMAGE在内存的映射.所以,后面的任何代码都不可以引用IMAGE映射地址内的任何代码.否则就OS会报错.而现在的代码在UnmapViewOfFile后则刚好没有引用到任何IMAGE内的代码.
3.在ExitProcess之前,EXE文件就被删除了.也就是说,进程尚在,而主线程所在的EXE文件已经没了.(WINNT/9X都保护这些被映射到内存的WIN32 IMAGE不被删除.)
25。利用Multimedia API做一个简单的媒体播放机,可以播放CD、VCD、MP3等。
26。用Direct3D和OpenGL分别做一个旋转的正方体,当然,OpenGL版的最好做成屏幕保护程序。这三题未免有些太简单了,做这一类工作的程序员每一题大概只要花15分钟就可以搞定吧
可以不回答.非常感谢.
2.假设该函数原型为static unsigned long Process(void *&p);则可声明指针形式如下:unsigned long (*func)(void *&);赋值时可以如下:func = Process;注意:指向的函数必须为静态,同时还要注意__stdcall和__cdel的问题。
3.msdn上的原文:
It is illegal to jump past a declaration with an initializer unless the declaration is enclosed in a block.The scope of the initialized variable lasts until the end of the switch statement unless it is declared in an enclosed block within the switch statement.但如果没有default,上述问题不存在。4.无论是数据寄存器、变址寄存器还是堆栈指针都会被改变。
5.表示此函数不改变他使用的对象的值。
6.函数参数值传递时,函数体首先会对参数进行拷贝。因此,若传递类对象本身,则拷贝数据过大;使用引用则使得函数体内可以直接修改类中成员;使用指针,拷贝的也只是个指针。
7.构造函数是内联inline的,不能作为虚函数。另外,声明为虚函数没有意义啊,难道其派生类能与基类同名吗?
8.1个
9.
10.只是一些扩展而已。CRuntimeClass是伴随着很多CObject扩展类的对象,使用DECLARE_DYNAMIC等几个宏引入。用于维护mfc派生类的类型等信息。
11、
__try Begins a guarded body of code. Used with the __except keyword to construct an exception handler, or with the __finally keyword to construct a termination handler.
__except Begins a block of code that is executed only when an exception occurs within its associated __try block.
__finally Begins a block of code that is executed whenever the flow of control leaves its associated __try block.
__leave Allows for immediate termination of the __try block without causing abnormal termination and its performance penalty. fs是一个段寄存器
12、windows如何实现Structured Exception Handling不清楚。try\catch中应该使用了SEH提供的异常诊断机制。
13、winmaincrtstartup->winmain->afxwinmain->{afxbeginthread->InitInstance->Run}
14.mfc为窗口控制加了许多内在的机制。在文档试图模型中,docmanager为文档类和窗口类建立了一些映射关系。
15.CSocket类内建了一个窗口,使用了窗口的消息循环。16、.h,.c,.cpp,.dsp,.rc, not using MFC,察看是否用mfc42.dll,mfvcrt.dll
17.not using precompiled headers
后面的题怎么都像是考试????
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up
up