使用 *.dll 作为“Pinvoke 集合”
本文关键字:Pinvoke 集合 作为 dll 使用 | 更新日期: 2023-09-27 18:31:42
我得到了一个包含多个类的项目,这些类对我来说应该像P/Invoke集合一样工作。
例如
namespace Win32
{
static class Winspool
{
[DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
public static extern uint GetPrinterData(
IntPtr hPrinter,
string pValueName,
out uint pType,
byte[] pData,
uint nSize,
out uint pcbNeeded);
}
}
该项目要大得多,并且只从win32 API中获得了DllImports,[StructLayout(LayoutKind.Sequential)],Flags,Structs,Enums等很多东西。
该项目应编译为 dll 文件,因为我需要在项目中到处调用多个 Win32 函数,并且不希望代码中的 dllimport 降级。
我现在的问题:是否可以在任何其他 C# 项目中使用此 dll 并调用导入的函数?
我尝试通过引用添加我的 dll,但我无法从我的 dll 中调用任何内容。
因为你的类不是public
的,所以它将具有internal
的默认可见性,并且从它自己的程序集外部不可见。
所以如果你把它public
:
public static class Winspool
{
}
然后,您可以从其他程序集访问它:
Win32.Winspool.GetPrinterData(...);