游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8383|回复: 20

如何获得一个函数内对象?

[复制链接]

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-6-8 00:51:00 | 显示全部楼层 |阅读模式
函数A内创建了一个对象a

函数B中,在不使用全局变量,B无法传入更多参数的情况下,如何调用到这个对象a ? 要“安全的使用”

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-6-8 08:54:00 | 显示全部楼层

Re:如何获得一个函数内对象?

A返回静态对象a的引用(泛指)

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-6-8 13:14:00 | 显示全部楼层

Re:如何获得一个函数内对象?

你这个要求也真够意思的.
函数本身只能通过参数或者访问全局的对象.

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-6-8 13:53:00 | 显示全部楼层

Re:如何获得一个函数内对象?

B不能传入更多参数那怎么获得对象啊?除了全局的。

函数A中创建的对象如果是局部的,A结束后对象就不存在了,B还怎么获得它?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2007-6-8 15:39:00 | 显示全部楼层

Re:如何获得一个函数内对象?

为什么要这么做呢?是纯粹研究探讨还是实际写程序时遇到了?

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-6-9 22:11:00 | 显示全部楼层

Re:如何获得一个函数内对象?

B函数就在中A用,这个问题挺烦人的

就是那个WndProc函数,要在WndProc中更新当前鼠标的位置,但是这个位置的逻辑处理是在消息处理循环中完成的,WndProc是WNDClASS对象的一个函数指针属性(可以这么理解吧?),所以我认为不能随便给WndProc加参数
,这个我没试过,也不敢乱来……

所以这个存放鼠标位置的变量或者结构体,只能设成全局的了?但这么做会让外挂钻空子吧?

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-6-9 22:43:00 | 显示全部楼层

Re:如何获得一个函数内对象?

有WINDOWS API函数可以用于查询鼠标位置和按键状态。

11

主题

31

帖子

40

积分

注册会员

Rank: 2

积分
40
QQ
发表于 2007-6-10 13:30:00 | 显示全部楼层

Re:如何获得一个函数内对象?

可以使用函数指针(VOID *p = A()),与new动态开避的方法!只不过delete就要放在使用过此对象的函数中了。

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-6-10 16:26:00 | 显示全部楼层

Re:如何获得一个函数内对象?

WndProc的话,你可以把Wnd对象::SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this);

然后在WndProc里::GetWindowLong(hWnd,GWL_USERDATA);强制指针类型转换到你的Wnd对象指针。这样就可以pWnd-> 了

比如说


  1. static LRESULT CALLBACK defAppWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3.         CBaseApp *pWnd= (CBaseApp*)::GetWindowLong(hWnd,GWL_USERDATA);
  4.         if(pWnd==NULL) return DefWindowProc(hWnd, message, wParam, lParam);
  5.         return pWnd->WndProc(hWnd, message, wParam, lParam);
  6. }
复制代码

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-6-10 20:47:00 | 显示全部楼层

Re:如何获得一个函数内对象?

SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this); 这几个参数代表什么呢?

GetWindowLong(hWnd,GWL_USERDATA);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 12:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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