WEB开发网
开发学院软件开发VC 安装钩子,托管C++中的字符串及其它 阅读

安装钩子,托管C++中的字符串及其它

 2006-07-20 11:42:41 来源:WEB开发网   
核心提示: 至于多个钩子的情况,只要你愿意,安装钩子,托管C++中的字符串及其它(4),安装多少个钩子都没关系,只是你要记得调用 ::CallNextHook 函数,每个对象都具备一个 Type 属性,而每个 Type 都有一个 Module 属性,这样便不会妨碍 MFC,我正在将一个现有的 C++

至于多个钩子的情况,只要你愿意,安装多少个钩子都没关系,只是你要记得调用 ::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 可以这么做:

上一页  1 2 3 4 5 6 7 8  下一页

Tags:安装 钩子 托管

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接