需要C Sharp win32,PInvoke API

时间:2010-09-23 18:10:19

标签: c# winapi interop pinvoke

长时间听众,第一次来电。有没有人知道Win32API的一个好的互操作库?

我发现pinvok.net没问题。 (FWIW我按照这里的说明获得了与MSVS 2010一起使用的插件: http://www.red-gate.com/supportcenter/GeneralContent.aspx?c=knowledgebase \ PInvoke的\ KB200711000198.htm 并使用10.0而不是9.0)

...来自MSDN的Windows API Code Pack 1.1似乎没有来自user32.dll的基本Win32内容,或者我错过了什么?

更多细节...... 我试图在我的托管System.Windows.Form(我的主窗体的面板或选项卡中的嵌入式GUI)中使用外部窗口并使其成为控件的子窗口。在这里和谷歌研究似乎Win32 / user32.dll是要走的路。我的应用程序是一个启动第三方GUI(dll和exes)的框架。第三方代码/表单都是非托管(主要是MSVC)代码。这些非托管表单从我的流程层次结构中启动。如果可能的话,我倾向于留在.NET中。

2 个答案:

答案 0 :(得分:2)

最好的互操作库是.NET Framework。 Windows Forms已经很好地包装了User32.dll。

Windows API代码包专注于包装在Vista和Win7中添加的API。那些不是user32的补充,主要是shell的东西。

如果您可以具体了解要使用的user32 API,那么您可能会得到更好的答案。


看到编辑后:Win32 SDK文档明确禁止您尝试执行的操作。窗口的父级必须属于同一进程。但是,Windows中存在一些appcompat hacks,旨在支持不存在此限制的Windows 3.x程序。因为它不支持线程化。

您可以尝试,但要注意,您的保修将失效。 P / Invoke SetParent()。访问pinvoke.net获取您需要的声明。

答案 1 :(得分:1)

大部分Windows 32 API在.NET框架本身中公开 - 因此很少需要P / Invoke到user32.dll。你最好使用框架的托管版本。

如果您确实需要设置P / Invoke调用,pinvoke.net是调用大多数Win32 API所需的特定API的绝佳资源。