|
| |

Visual-Basic Einsteiger| Also: | |  | | Autor: unbekannt | | Datum: 20.04.02 12:39 |
| Hi Daniel,
nach Analyse der Header- und CodeFile ergibt sich für VB folgendes:
Private Type SCSI_Info
Hald As Long 'Host Adapter ID
Target As Long 'SCSI Target
lPtrName As String 'Ptr auf String mit 64 Bytes
BlockSize As Long 'Size of one logical Block
Amount_of_Blocks As Long 'Anzahl of logical Blocks
End Type
Private Declare Function InitializeDLL Lib "wnaspi32.dll" Alias _
"Init_WNASPI32" () As Long
Private Declare Function ScanSCSI Lib "wnaspi32.dll" Alias _
"Scan_SCSI_Bus" _
(Byref lptrSCSIInfo As Long, _
Byval nTrueFalse As Long) As Long
Private Declare Sub SCSIPrevent Lib "wnaspi32.dll" Alias _
"SCSI_Prevent_Medium_Removeal" _
(Byref lptrSCSIInfo As Long, _
Byval nTrueFalse As Long)
Private Declare Function StoreImage Lib "wnaspi32.dll" Alias _
"Store_Image" _
(Byref lptrSCSIInfo As Long, _
Byval Drive As Long, _
Byref sPtrFileName) As Long
Private Declare Function MakeImage Lib "wnaspi32.dll" Alias _
"Make_Image" _
(Byref lptrSCSIInfo As Long, _
Byval Drive As Long, _
Byref sPtrFileName) As Long Kernstück des Ganzen ist ohne Zweifel die SCSI-Info-Struktur. Die ersten beiden Mitglieder der Struktur sind in C vom Datentyp Byte. Byte gibt es aber in C nicht, sondern
ist ein Datentyp aus C++. In C wird er als Integer umgesetzt und ein C-Integer wird in VB als Long umgesetzt. Wenn es Probleme mit der Struktur gäbe, müsste man an diesen beiden Members noch etwas feilen.
Bevor die eigentlichen DLL Funktionen verwendet werden können, muß die DLL initialisiert werden, dies geschieht mit der Funktion: InitializeDLL. Erst anschließend kann die SCSI-Info-Struktur mit ScanSCSI gefüllt werden, die dann von den Funktionen StoreImage oder MakeImage verwendet werden kann.
ScanSCSI bindet die Drives, SCSIPrevent gibt die Drives wieder frei.
Der beiliegende Quellcode ist nicht Code der DLL sondern ein Beispiel.
Byval und Byref bei der Übergabe von Strings: VB verarbeitet Strings als Unicode, während DLL's aber zumeist Ansi-Strings verarbeiten. Als eine Eselsbrücke gilt folgendes: Werden in den DLL-Parametern nur Strings übergeben, können sie mit Byval übergeben werden. Werden aber UDT's und Zahlen übergeben, kann ein String nicht mehr Byval übergeben werden, sondern nur noch per Referenz - ansonsten fliegt die Sache von VB aus ins Nirvana. Da ich keinen Einblick in die DLL habe, würde ich zur Vorsicht den lptrName-Member der Struktur mit lptrName = Space(64) definieren, klar das der String als Referenz übergeben werden muss. Im Beispiel wurde jedenfalls dieser Member mit Char[64] vorbelegt - Zeiger auf einen String mit 65 Zeichen.
Ob das nun funkt? Keine Ahnung! Das Beispiel gibt dazu nicht viel her.
cu
Lordchen |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
| |
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|