将.NET P/Invoke代码组织到Win32 API的最佳实践

Pau*_*sik 12 .net c# vb.net pinvoke

我在.NET中重构一个庞大而复杂的代码库,大量使用P/Invoke到Win32 API.项目的结构并不是最好的,我发现DllImport语句遍布整个地方,经常复制到同一个函数,并且还以各种方式声明:

import指令和方法有时被声明为public,有时是private,有时是静态的,有时也是实例方法.我担心重构可能会产生意想不到的后果,但这可能是不可避免的.

是否有可以帮助我的最佳实践记录?

我的instict是组织一个静态/共享Win32 P/Invoke API类,它在一个文件中列出所有这些方法和相关常量... 编辑有超过70个user32 DLL导入.

(代码库由20多个项目组成,包含大量的窗口消息传递和跨线程调用.如果有所不同,它也是从VB6升级的VB.NET项目.)

Han*_*ant 5

您可以考虑在.NET框架中完成它的方式.它总是声明一个名为NativeMethods的静态类(VB.NET中的Module),它包含P/Invoke声明.您可能比Microsoft程序员更有条理,有许多重复声明​​.不同的团队致力于框架的不同部分.

但是,如果要在所有项目中共享此项,则必须将这些声明声明为Public而不是Friend.哪个不好,它应该是一个实现细节.我认为您可以通过在每个需要它的项目中重用源代码文件来解决这个问题.通常禁忌但在这种情况下没关系,我想.

我个人在需要它们的源代码文件中根据需要声明它们,使它们成为私有.当说谎参数类型时,这也很有帮助,特别是对于SendMessage.