タイトル | : Re: AddPrinterDriverがうまくいきません |
記事No | : 10260 |
投稿日 | : 2010/10/20(Wed) 10:49 |
投稿者 | : 魔界の仮面弁士 |
AddPrinterDriver の Level は、2, 3, 4, 6, 8 を指定できるはずですが、 今回使用するのは Lavel3 なのですね?
以下、掲示板に直書きしたコードです。未検証。
> Private Declare Function AddPrinterDriver Lib "winspool.drv" Alias "AddPrinterDriverW" _ > (ByVal pName As String, _ > ByVal Level As Integer, _ > ByRef pDriverInfo As DRIVER_INFO_3) As Integer
Private Declare Unicode Function AddPrinterDriver Lib "winspool.drv" _ (ByVal pName As String, _ ByVal Level As Integer, _ ByRef pDriverInfo As DRIVER_INFO_3 _ ) As <MarshalAs(UnmanagedType.Bool)> Boolean
'DRIVER_INFO_3 を Structure として実装した場合は ByRef pDriverInfo、 'DRIVER_INFO_3 を Class として実装した場合は ByVal pDriverInfo にします。 '戻り値は、元が BOOL 型なので Boolean 型にし、そこに UnmanagedType.Bool を付与します。
> Public Structure DRIVER_INFO_3 > Public cVersion As Long > Public pName As String > Public pEnvironment As String > Public pDriverPath As String > Public pDataFile As String > Public pConfigFile As String > Public pHelpFile As String > Public pDependentFiles As String > Public pMonitorName As String > Public pDefaultDataType As String > End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode, Pack:=4)> _ Private Structure DRIVER_INFO_3 Public cVersion As UInteger Public pName As String Public pEnvironment As String Public pDriverPath As String Public pDataFile As String Public pConfigFile As String Public pHelpFile As String Public pDependentFiles As String Public pMonitorName As String Public pDefaultDataType As String End Structure
'CharSet は Declare 側と一致させます(Ansi/Unicode/Auto)。 'Pack は…多分 4 で良いと思いますが未調査です。 'cVersion は、元が DWORD なので UInt32 か Int32 型にしてください。
> Dim di As New DRIVER_INFO_3 Class なら New する必要がありますが、 Structure の場合は New は不要です。本題とは無関係ですが。
> If AddPrinterDriver(String.Empty, 3, di) = 0 Then ローカルにインストールする場合には、第 1 引数には String.Empty ではなく、Nothing を指定してください。
|