【问题标题】:DllImport a file with drv extensionDll导入带有drv扩展名的文件
【发布时间】:2012-10-17 16:03:13
【问题描述】:

我发现这句话说:

[ DllImport( "winspool.drv",CharSet=CharSet.Unicode,ExactSpelling=false, CallingConvention=CallingConvention.StdCall )]
public static extern long OpenPrinter (string pPrinterName,ref IntPtr phPrinter, int pDefault);

我想知道为什么它没有导入winspool.dll,因为它是一个DLLImport命令,winspool.dll和winspool.drv有什么区别

【问题讨论】:

  • 你为什么希望它导入一个你没有告诉它导入的文件?当您编码错误的文件名时,它无法猜测您的意思。
  • @AndrewBarber 我不认为这是一个很重要的问题——我认为它基本上可以归结为“DLLImport 真的可以导入不仅仅是 DLL 文件吗?”
  • @AndrasZoltan OP 似乎很困惑为什么 DllImport 在指定另一个文件(winspool.drv)时没有加载一个文件(名为 winspool.dll)。我同意您已经回答了问题的中心点,但我还想说明该属性仅加载您告诉它的文件 - 它不会尝试您没有特别命名的其他文件
  • @Andras Zoltan 确切地说,我的意思是既然文件 winspool.dll 存在,为什么我们不导入它而不是 winspool.drv
  • @Glolita Again:为什么您会希望它导入与您告诉它的文件不同的文件吗?

标签: c# dll dllimport


【解决方案1】:

drv 文件只是具有不同扩展名的动态链接库 (DLL)。操作系统也会对其公开哪些操作有不同的期望。

驱动程序专门用于在软件和硬件之间提供一些接口层,而 DLL 只是类+方法的通用模块。

没有编写驱动程序,我无法提供比这更多的说明。

然而,就您而言,它只是一个您可以加载的 DLL,然后您可以调用其导出的方法。如果你知道签名,那就是。

更新

通过更多研究 - Winspool.drv 实际上可能被 Windows 封装为一个进程。

至于 为什么 已经从 .drv 模块而不是 .dll 模块声明了一个导入,我最终无法断然回答这个问题,因为我不在的时候代码被写了!但最终,它们不一定是相同的东西,因此不一定有相同的出口等。

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2018-05-10
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多