C# 如何在不重写windows.h的情况下将Win32移植到.NET?
我正在将一个遗留的WIN32库移植到C#,以便将direclty编译到.NET应用程序中,并简化调试、重构等 尽管这个库很小,但它使用了大量的KERNEL32、GDI32和user32api。它是一个“优化”的图像处理工具,可以直接在GDI设备上下文中修改图像 问题是,每次调用新的API时,我都必须创建一个C#C# 如何在不重写windows.h的情况下将Win32移植到.NET?,c#,.net,wpf,winapi,pinvoke,C#,.net,Wpf,Winapi,Pinvoke,我正在将一个遗留的WIN32库移植到C#,以便将direclty编译到.NET应用程序中,并简化调试、重构等 尽管这个库很小,但它使用了大量的KERNEL32、GDI32和user32api。它是一个“优化”的图像处理工具,可以直接在GDI设备上下文中修改图像 问题是,每次调用新的API时,我都必须创建一个C#extern方法声明,以及正确描述的WIN32结构,当然还有它可能使用的常量。这是一项非常乏味且容易出错的任务 是否有一些Nuget或公开可用的源代码提供了对windows.h主要部分的移
extern
方法声明,以及正确描述的WIN32结构,当然还有它可能使用的常量。这是一项非常乏味且容易出错的任务
是否有一些Nuget或公开可用的源代码提供了对windows.h
主要部分的移植
我希望我可以使用,但这使用了
内部
可见性…查看许多常用Win32 API的C#声明如果您在程序集中使用/复制上面指定的UnsafeNativeMethods.cs,则“internal”关键字没有问题。声明在程序集中可见,但对其他程序集不可见。请参阅MSDN中的“内部”定义。使用C++/CLI为本机实现编写包装器可能是一种更有效的策略。我编写互操作代码已有多年了。windows.h远非万能,SDK中大约有4000个h文件。据我所知,没有神奇的工具,因为许多API都没有技术注释,所以只能通过查看参数和读取文档来构建互操作。您可以从现有源代码或stackoverflow上的现有程序集(使用反编译工具)中窃取许多代码。另一个解决方案是编写.IDL文件并从中构建TLB,您可以从.NET使用它。顺便说一句,我为“常量”问题写了这个免费的在线工具:-)