游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3647|回复: 11

请教一个问题!

[复制链接]

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2005-3-28 10:06:00 | 显示全部楼层 |阅读模式
主表面、后备缓冲区、离屏表面等都属于directxdraw组件,是不是每创建这样一个对象的同时都必须创建一个接口与之对应,既有多少个对象,就有多少个接口?还是同属于一个组件的各个被创建的对象共用一个接口?

1

主题

48

帖子

48

积分

注册会员

Rank: 2

积分
48
发表于 2005-3-28 10:22:00 | 显示全部楼层

Re:请教一个问题!

这是com的问题。

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-3-28 14:55:00 | 显示全部楼层

Re:请教一个问题!

只创建一个directxdraw接口就可以了,然后利用这个接口处理主表面、后备缓冲区和所有的离屏表面!

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-3-29 10:04:00 | 显示全部楼层

Re: Re:请教一个问题!

DreamSnow: Re:请教一个问题!

只创建一个directxdraw接口就可以了,然后利用这个接口处理主表面、后备缓冲区和所有的离屏表面!

但这样,我们定义的那些主表面对象、后备缓冲区对象和离屏表面对象的指针都指向这一个接口,那它是根据什么找到以上我们所创建的各个不同对象?

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-3-29 12:12:00 | 显示全部楼层

Re:请教一个问题!

如果考虑实现的原理,就涉及到很多COM的知识,比较复杂,我弄得也不是很明白,就来说一下直观的现象吧!

directxdraw接口提供了很多函数(方法),而这些函数是通过directxdraw接口指针来调用的,就像类的成员函数需要通过类对象或类指针来调用一样。而主表面、后备缓冲区和离屏表面这些对象是作为参数传递给函数的。

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-3-29 14:56:00 | 显示全部楼层

Re:请教一个问题!

LPDIRECTDRAWSURFACE7 lpDDprimary = NULL; //Directdraw主画面
LPDIRECTDRAWSURFACE7 lpDDback = NULL; //Directdraw后备画面
LPDIRECTDRAWSURFACE7 lpDDbpic = NULL; //Directdraw备用画面
我感觉他们应该指向这个共同接口,例如:lpDDprimary->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR,NULL)这时,lpDDprimary好像没有作为参数传递给函数啊?
不过,楼上的认为这些指针都具体指向什么?难道不指向接口,指向我们实际创建的对象?多谢指教!

7

主题

54

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2005-3-29 15:04:00 | 显示全部楼层

Re:请教一个问题!

我的理解是,调用lpDDprimary的Lock方法,锁定了一段内存给lpDDprimary来使用,所以不需要将lpDDprimary作为参数传进去。

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2005-3-29 16:08:00 | 显示全部楼层

Re:请教一个问题!

这个根据COM的原理可以理解的,COM本身是一个接口的集合,LPDIRECTDRAW ,LPDIRECTDRAWSURFACE等定义出来的是接口指针,通过它能调用该接口的函数,而这些函数在内部是用类来组织的,COM只是隐藏了它的数据成员和实现 ,COM的对象实际上是通过CreateObject来实现的,在Dx里就是DirectDrawCreate等函数,COM接口是相互独立的,但能协同工作,像聚合等,实际上是一种二进制层面上的封装

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2005-3-30 09:31:00 | 显示全部楼层

Re:请教一个问题!

按照楼上的说法,是不是LPDIRECTDRAWSURFACE7 lpDDprimary = NULL主画面
LPDIRECTDRAWSURFACE7 lpDDback = NULL; //Directdraw后备画面
LPDIRECTDRAWSURFACE7 lpDDbpic = NULL; //Directdraw备用画等这些指针,如果都共用一个接口,那都指向同一接口的不同位置了?

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2005-3-30 10:15:00 | 显示全部楼层

Re:请教一个问题!

看一下COM本质论那本书,你上面的接口指针都是同一个接口类型,所以指向同一个位置,他们通过引用计数来管理,具体太多了说不清,如果真想明白就好好看一下COM,不过建议知道怎么用就可以了,不需要了解太多COM的细节,毕竟那是很烦琐的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 00:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表