使用 *.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 中调用任何内容。

使用 *.dll 作为“Pinvoke 集合”

因为你的类不是public的,所以它将具有internal的默认可见性,并且从它自己的程序集外部不可见。

所以如果你把它public

public static class Winspool
{
}

然后,您可以从其他程序集访问它:

Win32.Winspool.GetPrinterData(...);