安装钩子,托管C++中的字符串及其它
2006-07-20 11:42:41 来源:WEB开发网至于多个钩子的情况,只要你愿意,安装多少个钩子都没关系,只是你要记得调用 ::CallNextHook 函数,这样便不会妨碍 MFC。
我正在将一个现有的 C++ 类库转换为托管扩展,以便能在 .NET 框架客户端使用它们。我的代码调用了 API 函数,这些函数需要当前运行模块的 HINSTANCE。我不想使用我的 DLL 的 HINSTANCE;我想让调用者提供 EXE 的 HINSTANCE,该 EXE 调用我的 DLL。我能将 HINSTANCE 声明为一个 IntPtr,但我的基于 .NET 的客户端如何让应用程序的 HINSTANCE 传递给我的函数?在 C# 中是如何做的?
Hunter Gerson
好问题!这个问题把我难住了十五分钟。在 MFC 中你可以调用 AfxGetInstanceHandle()。MFC 将 HINSTANCE 存储在其 Application 对象 CWinApp::m_hInstance 中。所以如果你用的是微软 .NET 框架,你也许会想到要察看一下 Application 对象 Application.HInstance 或者 Application 属性等等。为什么不呢?因为 .NET 框架中就没有这些东西。
如果你在框架文档中搜索“hinstance”,你会发现有一个方法叫 Marshal.GetHINSTANCE。文档中是这样描述的,静态的 Marshal 方法需要一个模块(Module)作为参数,你想获得的是这个模块的 HINSTANCE。
// In C#
Module m;
...
IntPtr h = Marshal.GetHINSTANCE(m);
现在你应该知道如何设置该 HINSTANCE 了——那么到哪里获取模块对象呢?再说一次,你可以察看一下 Application 类,看看有没有象 Application.GetModule 之类的东西。或者也许 Application 派生于模块。可惜不是那样。难道有一个 Module 属性,也不是。嗯,应该说不完全是,有一个 Module 属性,但它不是 Application 属性,而是 Type 的属性。在 .NET 框架中,每个对象都具备一个 Type 属性,而每个 Type 都有一个 Module 属性。Type.Module 表示的是实现该类型的模块。所以获取调用模块的 HINSTANCE 可以这么做:
- ››安装与卸载Win 8双界面应用程序
- ››安装CentOS的注意事项
- ››安装 Intel C++ Compiler 12 以后,VC6 不能编译的...
- ››安装win 8 让Win7与Win8双系统共存
- ››安装YLMF OS及VBox增强功能
- ››安装EPP的调试Zend Debugger
- ››安装并配置SQL Server 2005群集
- ››安装WebSphere WAS应用服务器
- ››安装Android开发工具
- ››安装和卸载Android应用程序(apk包)的命令
- ››安装APK文件到Android模拟器和Android sdcard的使...
- ››安装CentOS oracle过程设置使用解压包
更多精彩
赞助商链接