我需要使用this库(Interception
)。它写在C++
中。简而言之,它允许您操纵键盘或鼠标的输入。
我需要做的是使用C#
中的一些来电。
我不确定要遵循哪条路径。到目前为止,我已经读过您可以使用Pinvoke
在C++
内使用C#
代码。
关于PInvoke
,我有很多问题:
1)Pinvoke
库是否需要位于特定的系统路径中(例如system32
)?
我已经知道,获得正确的PInvoke
签名可能很难且容易出错,因为我无法在<{1}}中找到任何PInvoke
签名EM> PInvoke.net ,
2)这是否意味着我应该停止使用Interception
?
我也看过,但没有详细说明,在Visual Studio中,当您创建项目时,可以创建PInvoke
。
3)我应该使用它来构建链接Visual C++->CLR->Class Library
的程序集吗?这个程序集可以在Interception
中使用吗?
无论如何,如果C#
替代C#
,我会改用它。
答案 0 :(得分:3)
1)不,如果库与可执行文件位于同一路径中,它将起作用。
2)您只使用带有C函数的PInvoke,而不是C ++对象。因此,使用PInvoke直接调用拦截库可能是不可能的。
3)您可以创建链接到拦截的C ++ / CLI库。但是您必须创建自己的.NET对象以将纯C ++对象包装在拦截中。
我建议您阅读一些关于在C ++中编写CLR的内容。在C ++ / CLI中创建CLR包装器可能是最简洁的方法。
答案 1 :(得分:2)
使用系统DLL search path解析p / invoke导入。所以DLL不需要在系统目录中。它只需要在DLL搜索路径中。实际上,您不应该将它放在系统目录中,因为系统拥有它。最好的位置是与可执行文件相同的目录。首先搜索该位置。
有问题的库有一个相当小的头文件,它呈现了一个C风格的界面。它是p / invoke的一个相当简单的候选者。您当然不会在pinvoke.net上找到任何翻译,但翻译此库也不难。
您当然可以使用C ++ / CLI进行互操作。这将添加另一个层和另一个模块。另一方面,你可以在链条的下方保持类型安全。如果您对interop和p / invoke没有信心和经验,那么C ++ / CLI可能会更高效。