万能的CSDN,小弟我有个VC的简单有关问题。希望能指点一二。

万能的CSDN,我有个VC的简单问题。。希望能指点一二。。

我用VC写了个DLL,后来我想传一个句柄到DLL,让DLL发生指定的事件时,发消息到那句柄上。


我的思路是传入句柄值,用一个变量保留,之后当发生指定事件时再读取这个变量,发消息。但一开始的时候却错了.


DLL里传入的那句是:



bool WINAPI SetUseWin_ON(long &pHwnd)
{
tlong = &pHwnd;
char strt[255];
memset(strt,0,255);
itoa(*tlong,strt,10);
MessageBox(0,strt,"提示",0);

......



这是传入句柄,在这一过程,测试的时候所弹的内容的确等于传入的值了。

但是在之后事件发生的时候,再读取tlong,就读取成0蛋了。(其余的过程中我没动过那个值。。。)怎么办?

我是VC的新手...我也试过搜索VC的全局变量使用,但总测试不成功啊。到底如何使用?有谁可略略出手,帮我解决这一问题啊?感谢感谢~~

------解决方案--------------------
tlong保存的只是一个指针,问题在于这个指针指向的内存可能是调用者的一个栈内存,内容早就失效了。句柄值可以直接保存起来,不需要指针,比如

HWND tlong = NULL;

bool WINAPI SetUseWin_ON(HWND pHwnd)
{
tlong = pHwnd;
...
}
------解决方案--------------------
指针不保证永远指向有效地址,需要格外小心。像你这种情况,因为类型长度一样,可以直接传值,然后强制转换