1. 伯乐范文网 > 知识库 >

declare_dyncreate,在C语言中,++是什么含义?

本文目录索引

1,在C语言中,++是什么含义?

在C语言中,++的含义是:单目运算符,’++‘是原始值累加1。 C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。

在C语言中,++是什么含义?

2,请问MFC中什么是“动态创建”?比如DECLARE_DYNAMIC宏有什么作用呢?多谢了

简单来说,动态创建就是一个类会在第一次使用时,自动创建一个它的对象。这一点与 singleton (单件) 有点类似,但声明了 DECLARE_DYNAMIC 的类,依然可以自己再创建这个类的对象,而 singleton 则只能有一个对象。

句柄的英文名称是 handle,可以想象为一个门把手,每个门把手可以打开一道门。例如一个窗口句柄,通过这个句柄就可以访问这个窗口。

有些东西其实用英文来描述一下就会觉得很浅显易懂,有时候甚至很生活化,“不就是个把手么”。只不过翻译成中文的时候,为了显示出专业性,总不能用“把手”这种名字吧,所以就翻译成很拗口的“句柄”了。

3,为什么CRuntimeClass结构里包含有CObject CObject也包含有CRuntimeClass

========>《深入浅出MFC》侯捷P96页
R:\DISSECT\FRAME3.03>my.exe
CView
4
65535
CDocument
4
65535
CFrameWnd
4
65535
CWnd
4
65535
CWinApp
12
65535
CWinThread
4
65535
CCmdTarget
4
65535
CObject
4
65535
<=======================================
////////////////////////--------------CRuntimeClass-------------------------///////////////////////////
// Basic object model

struct CRuntimeClass
{
// Attributes
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema; // schema number of the loaded class
CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
#ifdef _AFXDLL
CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();
#else
CRuntimeClass* m_pBaseClass;
#endif

// Operations
CObject* CreateObject();
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

// Implementation
void Store(CArchive& ar) const;
static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);

// CRuntimeClass objects linked together in simple list
CRuntimeClass* m_pNextClass; // linked list of registered classes
};
====================================================================
///////////////////////////----------------CObject---------------------///////////////////////////////
// class CObject is the root of all compliant objects

#ifdef _AFXDLL
class CObject
#else
class AFX_NOVTABLE CObject
#endif
{
public:

// Object model (types, destruction, allocation)
virtual CRuntimeClass* GetRuntimeClass() const;
virtual ~CObject(); // virtual destructors are necessary

// Diagnostic allocations
void* PASCAL operator new(size_t nSize);
void* PASCAL operator new(size_t, void* p);
void PASCAL operator delete(void* p);
#if _MSC_VER >= 1200
void PASCAL operator delete(void* p, void* pPlace);
#endif

#if defined(_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)
// for file name/line number tracking using DEBUG_NEW
void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
#if _MSC_VER >= 1200
void PASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);
#endif
#endif

// Disable the copy constructor and assignment by default so you will get
// compiler errors instead of unexpected behaviour if you pass objects
// by value or assign objects.
protected:
CObject();
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation

// Attributes
public:
BOOL IsSerializable() const;
BOOL IsKindOf(const CRuntimeClass* pClass) const;

// Overridables
virtual void Serialize(CArchive& ar);

#if defined(_DEBUG) || defined(_AFXDLL)
// Diagnostic Support
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

// Implementation
public:
static const AFX_DATA CRuntimeClass classCObject;
#ifdef _AFXDLL
static CRuntimeClass* PASCAL _GetBaseClass();
#endif
};

4,runtime动态创建一个类,需要注意什么

- (void)createClass
{
Class MyClass = objc_allocateClassPair([NSObject class], "myclass", 0);
//添加一个NSString的变量,第四个参数是对其方式,第五个参数是参数类型
if (class_addIvar(MyClass, "itest", sizeof(NSString *), 0, "@")) {
NSLog(@"add ivar success");
}
//myclasstest是已经实现的函数,"v@:"这种写法见参数类型连接
class_addMethod(MyClass, @selector(myclasstest:), (IMP)myclasstest, "v@:");
//注册这个类到runtime系统中就可以使用他了
objc_registerClassPair(MyClass);
//生成了一个实例化对象
id myobj = [[MyClass alloc] init];
NSString *str = @"asdb";
//给刚刚添加的变量赋值
// object_setInstanceVariable(myobj, "itest", (void *)&str);在ARC下不允许使用
[myobj setValue:str forKey:@"itest"];
//调用myclasstest方法,也就是给myobj这个接受者发送myclasstest这个消息
[myobj myclasstest:10];

}
//这个方法实际上没有被调用,但是必须实现否则不会调用下面的方法
- (void)myclasstest:(int)a
{

}
//调用的是这个方法
static void myclasstest(id self, SEL _cmd, int a) //self和_cmd是必须的,在之后可以随意添加其他参数
{

Ivar v = class_getInstanceVariable([self class], "itest");
//返回名为itest的ivar的变量的值
id o = object_getIvar(self, v);
//成功打印出结果
NSLog(@"%@", o);
NSLog(@"int a is %d", a);
}

5,directx有什么用?

1、作用 DirectX是一种应用程序界面(api),可让以Windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。 2、举例说明 下面我们来举个例子说明Directx的作用:以前我们玩Dos游戏的时候,都必须设置声卡的品牌,然后再设置它的irq、i/o、dma,其中有一项设置不对游戏就发不出声。这部分设置不但让玩家伤透脑筋,对游戏设计者开说也非常头痛!因为游戏设计者做游戏之初便需要把市面上所有声卡硬件数据都收集过来,然后根据不同的api来写不同的驱动程序。 现在我们玩Windows游戏,并不会做这些设置,因为Directx提供了一个共同的应用程序界面,只要这个游戏是依照Directx来开发的,不管你是什么显卡、声卡、统统都能玩,而且还能发挥比Dos下更佳的效果。当然,前提是你的显卡、声卡的驱动程序也必须支持Directx才行。 3、Directx由许多api组成: 1)DirectDraw:这是Directx中非常重要的部分。它担任图形处理的关键。以往在实地址的Dos下设计游戏时,为了游戏速度的考虑,都让程序直接操作硬件。 2)DirectSound这是用来处理声音的api,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。前面所举的声卡兼容的例子,就是利用了DirectSound来解决的。 3)DirectInput这用来处理游戏的一些外围装置,例如游戏摇杆、gamepad、方向盘、vr手套、力反馈的各种设备等。以往要在Dos下用方向盘来玩赛车游戏,就要先调整好irq、dma等各种设置。而现在DirectInput则使这些设备与游戏配合良好,不需要做特别配置。 4)DirectPlay这是为了满足近来流行的网络游戏而开发的api,支持多通信协议,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。 5)Direct3D(D3D):d3d的大名相信谁都听过吧!对现在的游戏来说d3d实在是太重要了!由于3d游戏的兴起,各大厂商纷纷推出3d加速卡为了避免重蹈声卡的覆辙,微软从Directx3.0后加入d3d这个api,让3d游戏有一个共同的开发标准。这样当游戏再执行时若需要绘图时就会通过d3d向显卡驱动程序提出要求从而完成绘图。