vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
DLL aufrufen mit VB48Daniel19.04.02 18:01
Re: DLL aufrufen mit VB229unbekannt19.04.02 19:10
Re: DLL aufrufen mit VB32Daniel19.04.02 20:32
Schicke mir mal den C-Quell247unbekannt19.04.02 20:36
Re: Schicke mir mal den C-Quell31Daniel19.04.02 21:45
Hi Für einen VS-Enterpriser ...208unbekannt19.04.02 21:52
Also:235unbekannt20.04.02 12:39
DANKE !!29Daniel20.04.02 15:13
Also hier die Umsetzung aus C++240unbekannt20.04.02 16:39
Au, die UDT zeigt ja auf long ...214unbekannt20.04.02 17:27
grrr Mouse zu schnell für Lordchen 208unbekannt20.04.02 17:29
Schon wieder DANKE!!31Daniel20.04.02 17:54
Na, es kommen bestimmt Probs .. (oT)196unbekannt20.04.02 18:05
Hast recht !!28Daniel20.04.02 19:34
Re: Hast recht !!195unbekannt21.04.02 01:35
Aber schon einen Sieg zu verzeichnen 198unbekannt21.04.02 01:45
Re: Aber schon einen Sieg zu verzeichnen 39Daniel21.04.02 02:20
Mit etwas, was ich noch nicht mal testen kann? support?212unbekannt21.04.02 02:55
Wie übergibt man ein UDT-Array?279unbekannt21.04.02 12:45
Re: Wie übergibt man ein UDT-Array?45Daniel21.04.02 19:29
Re: Wie übergibt man ein UDT-Array?26Daniel21.04.02 20:26
Womit Du Recht hast,267unbekannt21.04.02 21:22
hmm61Daniel21.04.02 21:53
Ganz einfach:209unbekannt21.04.02 22:30
Re: Ganz einfach:26Daniel21.04.02 22:53
Re: Ganz einfach:25Daniel22.04.02 08:28

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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