2017-07-17 2 views
0

i diesen Code schreiben laden Standarddrucker in Windows zu ändern und arbeitet gut, aber in reload die INI-Datei hat einen Fehler dies ist ein Code:vb.net Anwendungen, die die INI-Datei

Private Sub SetDefaultPrinter(ByVal PrinterName As String, ByVal DriverName As String, ByVal PrinterPort As String) 
    Dim DeviceLine As String 

    'rebuild a valid device line string 
    DeviceLine = PrinterName & "," & DriverName & "," & PrinterPort 

    'Store the new printer information in the 
    '[WINDOWS] section of the WIN.INI file for 
    'the DEVICE= item 
    Call WriteProfileString("windows", "Device", DeviceLine) 

    'Cause all applications to reload the INI file 
    Call SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows") 

End Sub 

Private Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lparam As String) As Long 
Private Const HWND_BROADCAST As Long = &HFFFF& 
Private Const WM_WININICHANGE As Long = &H1A 

und das ist ein Fehler:

ein Aufruf von PInvoke Funktion ‚! Testen Test.Form2 :: Sendmessage‘ hat den Stapel unausgewogen. Dies liegt wahrscheinlich daran, dass die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur übereinstimmt. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Ziel-Signatur übereinstimmen.

Hat jemand eine Idee, um dieses Problem zu lösen? Thankful

+0

www.pinvoke.net – Plutonix

+0

@Plutonix Nicht viel empfehlen, eine Website wie diese zu empfehlen, so voller Fehler, wie es ist. –

Antwort

0
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (_ 
    ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ 
    ByVal lparam As String) As Long 

Ihre Datentypen sind falsch. Der hwnd Parameter ist Zeigergröße, wMsg ist ein 32-Bit-Wert und wParam, lParam und der Rückgabewert sind Zeigergröße. Beachten Sie, dass ein 64-Bit-Typ ist.

Stattdessen sollte es

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (_ 
    ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, _ 
    ByVal lparam As String) As IntPtr 

Hinweis sein, die ich empfehlen, dass in der modernen, Sie pinvoke Erklärungen verwenden, anstatt Declare. Dies bietet viel mehr Flexibilität.

Verwandte Themen