Hallo,
ich möchte gerne folgenden VB6 Code nach VB.NET (Visual Basic 2008) aktualisieren:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef _
hpvDest As Any, ByRef hpvSource As Any, ByVal cbCopy As Integer) Mal abgesehen davon, dass VB.NET den Datentyp Any nicht auflösen kann, stehe ich vor dem Problem, dass ich eine DruckerAPI in VB6 habe, die nun leider ein sehr zentraler Bestandteil unseres doch recht umfangreichen (und auch älteren) VB6 Projekts ist.
Public Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Integer, _
ByVal dwBytes As Integer) As Integer
Public Function GetPrinter(ByRef frmOwner As System.Windows.Forms.Form, _
Optional ByRef PrintFlags As Short = 0) As Printer
Dim PrintDlg As New PRINTDLG_TYPE
Dim DevMode As New DEVMODE_TYPE
Dim DevName As New DEVNAMES_TYPE
Dim lpDevMode, lpDevName As Integer
...
DevMode.dmDeviceName = Printer.DeviceName
DevMode.dmSize = Len(DevMode)
DevMode.dmFields = DM_ORIENTATION Or DM_DUPLEX
DevMode.dmOrientation = Printer.Orientation
PrintDlg.hDevMode = GlobalAlloc(GMEM_MOVEABLE Or GMEM_ZEROINIT, Len(DevMode))
lpDevMode = GlobalLock(PrintDlg.hDevMode)
If lpDevMode > 0 Then
CopyMemory(lpDevMode, DevMode, Len(DevMode))
bReturn = GlobalUnlock(PrintDlg.hDevMode)
End If
... Ich habe diesen Fremdcode aus dieser Api allerdings auch nicht so ganz verstanden, um ehrlich zu sein. CopyMemory scheint da wohl Pointer auf Speicheradressen zu "verschieben".
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef _
hpvDest As Object, ByRef hpvSource As Object, ByVal cbCopy As Integer) funktioniert auch leider nicht-VB stürzt dann wohl ab.
Problem ist, dass ich da keine Structures übergeben kann.
Auch wenn man CopyMemory überlädt in etwa wie z.B.
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef _
hpvDest As Object, ByRef hpvSource As _beliebigeStruktur, ByVal cbCopy As _
Integer) oder umgekehrt
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef _
hpvDest As _beliebigeStruktur, ByRef hpvSource As Object, ByVal cbCopy As _
Integer) hängt sich der Compiler auf.
Hat da jemand eine Idee vielleicht, wie man da sonst die ComDlg32 unter .NET nutzen bzw. CopyMemory zum Laufen bringen kann ?
Viele Grüße und herzlichen Dank im Voraus,
Stephan |