需要C Sharp win32、PInvoke API

发布于 2024-09-24 12:51:19 字数 641 浏览 9 评论 0原文

长期倾听者,第一次来电。有谁知道 Win32API 有一个好的互操作库吗?

我发现pinvok.net 还可以。 (FWIW 我按照此处的说明让插件与 MSVS 2010 一起使用: http://www.red-gate.com/supportcenter/GeneralContent.aspx ?c=知识库\PInvoke\KB200711000198.htm 并使用 10.0 而不是 9.0)

...MSDN 中的 Windows API Code Pack 1.1 似乎没有 user32.dll 中的基本 Win32 内容,或者我是否遗漏了某些内容?

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

Long time listener, first time caller. Does anyone know of a good interop library for the Win32API?

I found pinvok.net which is OK.
(FWIW I got the addin to work with MSVS 2010 by following the instructions here:
http://www.red-gate.com/supportcenter/GeneralContent.aspx?c=knowledgebase\PInvoke\KB200711000198.htm
and using 10.0 instead of 9.0)

...and the Windows API Code Pack 1.1 from MSDN seems not to have the basic Win32 stuff from user32.dll or am I missing something?

More specifics...
I am trying to take an external window and make it a child of a control in my managed System.Windows.Form (embedded GUI in a panel or tab of my main form). Researching here and on google it seems like Win32/user32.dll is the way to go. My application is a framework that launches 3rd party GUIs (dlls and exes). The 3rd party code/forms are all unmanaged (mostly MSVC) code. These unmanaged forms are launched from within my process hierarchy. My preference would be to stay in .NET if is possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时间海 2024-10-01 12:51:19

最好的可用互操作库是 .NET Framework。 Windows 窗体很好地封装了 User32.dll。

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

如果您能够具体说明您想要使用哪些 user32 API,您可能会得到更好的答案。


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

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

The best interop library available is the .NET Framework. User32.dll is wrapped very well by Windows Forms.

The Windows API code pack concentrates on wrapping API additions made in Vista and Win7. Those were not additions to user32, mostly shell stuff.

You'll probably get a better answer if you can be specific about exactly what user32 APIs you want to use.


After seeing edit: what you are trying to do is explicitly forbidden by the Win32 SDK documentation. The parent of a window must belong to the same process. There are however some appcompat hacks in Windows, designed to support Windows 3.x programs where this restriction did not exist. Because it didn't support threading.

You can try, but beware you'll void the warranty. P/Invoke SetParent(). Visit pinvoke.net for the declaration you'll need.

回首观望 2024-10-01 12:51:19

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

当您确实需要设置 P/Invoke 调用时,pinvoke.net 是一个很好的资源,可提供所需的特定 API调用大部分 Win32 API。

Much of the Windows 32 API is exposed in .NET in the framework itself - so it's rare that you need to P/Invoke into user32.dll. You're better off using the managed versions of the framework.

When you do need to setup a P/Invoke call, pinvoke.net is a great resource for the specific API required for a call into most of the Win32 API.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文