2012-10-17 31 views
0

我发现这个声明说:的DllImport与DRV扩展名的文件

[ 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

+2

为什么你会期望它导入一个你没有告诉它导入的文件?它不能*猜测*当你编写错误的文件名称时你的意思。 –

+1

@AndrewBarber我不认为这是相当问的问题 - 我认为它基本上归结为'可以DLLImport真正导入不仅仅是DLL文件?' –

+1

@AndrasZoltan OP似乎困惑了为什么当指定另一个文件(winspool.drv)时,DllImport没有加载一个文件(名为winspool.dll)。我同意你已经回答了问题的中心点,但我也想解决该属性只会加载你告诉它的文件 - 它不会尝试其他没有专门命名的文件 –

回答

1

A drv文件只是一个具有不同扩展名的动态链接库(DLL)。操作系统对它所暴露的操作也会有不同的期望。

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

没有写驱动程序,我不能提供更多的说明。

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

更新

从更多的研究 - 这可能是WINSPOOL.DRV实际上是炮轰通过Windows中的一个过程。

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