如何访问DLL中的变量和如何在DLL中访问其他程序上面的控件

kofbashen2001 2004-11-21 05:54:55
我现在有一个DLL.此DLL是一个监视鼠标的..
以下是我的程序:
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
HWND hWnd = ((MOUSEHOOKSTRUCT *)lParam)->hwnd;
LONG lStyle = ::GetWindowLong(hWnd,GWL_STYLE);
TCHAR cPass[PASSLENGTH];
if(wParam == WM_MOUSEMOVE && (lStyle & ES_PASSWORD))
::GetWindowText(hWnd,(LPTSTR)cPass,PASSLENGTH);
else if(wParam == WM_LBUTTONUP)
AfxGetMainWnd()->PostMessage(WM_LBUTTONUP,0,0);
return CallNextHookEx(hMouseHook,nCode,wParam,lParam);
}
现在我想在调用这个DLL的其他程序中访问到cPass.请问要怎么做?
在我的对话框中有一个编辑框控件ID为:IDC_EDIT_X.这个是用来显示鼠标的当前位置的X坐标的.
如何在DLL中把((MOUSEHOOKSTRUCT *)lParam)->pt.x);给传过来到IDC_EDIT_X加以显示之

请高手指点.....
...全文
131 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigFanOfCpp 2004-12-02
  • 打赏
  • 举报
回复
老大,方法有两个:
1.可以发消息。
2.或者用共享数据段。
比如:
#pragma data_seg("SHARE")
int nPos;//你要传递的数据.
#pragma data_seg()

#pragma comment(linker,"/section:SHARE,RWS");

这样就创造了进程共享数据段,然后让你的DLL和你的主进程访问就可以了.
kofbashen2001 2004-12-02
  • 打赏
  • 举报
回复
可以给我一些代码吗?我现在还有点搞不清楚哦。导出来的都是函数的指针吧!要如果在我的程序中用到呢?
如想导出:char * fn();
这样的函数在程序中要如果定义一个能取得这个函数的地址变量呢?

danyueer 2004-11-21
  • 打赏
  • 举报
回复
1 同一个Dll在不同的进程空间中变量是不一样的,你需要声明一个共享段,把你的全局变量放在共享段中声明,这样,Dll在不同进程中,这个数据的值是一样的;

2 你可以定义一个输出函数,这个函数的功能就是传出改变量的值;你也可以用同样的办法改变这个变量的值,但是请注意,不要试图传出这个变量的指针,然后在应用程序中修改;

3 可以把控件指针或者句柄作为参数传入Dll,如果传进的是指针,用IsBadReadPtr判断一下。
oyljerry 2004-11-21
  • 打赏
  • 举报
回复
可以在dll中导出一个函数访问cPass,然后你就可以在调用dll的时候,直接用导出函数访问了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧