Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不重写windows.h的情况下将Win32移植到.NET?_C#_.net_Wpf_Winapi_Pinvoke - Fatal编程技术网

C# 如何在不重写windows.h的情况下将Win32移植到.NET?

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主要部分的移

我正在将一个遗留的WIN32库移植到C#,以便将direclty编译到.NET应用程序中,并简化调试、重构等

尽管这个库很小,但它使用了大量的KERNEL32、GDI32和user32api。它是一个“优化”的图像处理工具,可以直接在GDI设备上下文中修改图像

问题是,每次调用新的API时,我都必须创建一个C#
extern
方法声明,以及正确描述的WIN32结构,当然还有它可能使用的常量。这是一项非常乏味且容易出错的任务

是否有一些Nuget或公开可用的源代码提供了对
windows.h
主要部分的移植


我希望我可以使用,但这使用了
内部
可见性…

查看许多常用Win32 API的C#声明如果您在程序集中使用/复制上面指定的UnsafeNativeMethods.cs,则“internal”关键字没有问题。声明在程序集中可见,但对其他程序集不可见。请参阅MSDN中的“内部”定义。使用C++/CLI为本机实现编写包装器可能是一种更有效的策略。我编写互操作代码已有多年了。windows.h远非万能,SDK中大约有4000个h文件。据我所知,没有神奇的工具,因为许多API都没有技术注释,所以只能通过查看参数和读取文档来构建互操作。您可以从现有源代码或stackoverflow上的现有程序集(使用反编译工具)中窃取许多代码。另一个解决方案是编写.IDL文件并从中构建TLB,您可以从.NET使用它。顺便说一句,我为“常量”问题写了这个免费的在线工具:-)