AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umgang mit PSafeArray

Ein Thema von Horst0815 · begonnen am 14. Sep 2014 · letzter Beitrag vom 16. Sep 2014
Antwort Antwort
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#1

Umgang mit PSafeArray

  Alt 14. Sep 2014, 20:11
versuche folgenden Code in Pascal umzusetzen

benötigte Typbilblotheken hab ich importiert

Microsoft IMAPI2 Base Functionality
Microsoft IMAPI2 File system Image Creator


Code:
' This script examines the burn device characteristics such as
' product ID, product revision level, feature set, and profiles.

' Copyright (C) Microsoft Corp. 2006

Option Explicit

' Constants
const IMAPI_FEATURE_PAGE_TYPE_DVD_DASH_WRITE = 47

WScript.Quit(Main)

Function Main
    Dim Index               ' Index to recording drive.
    Dim Recorder            ' Recorder object
    Dim Path                ' Directory of files to burn
    Dim Stream              ' Data stream for burning device
   
    Index = 1                ' Second drive on the system

    ' Create a DiscMaster2 object to connect to CD/DVD drives.
    Dim g_DiscMaster
    Set g_DiscMaster = WScript.CreateObject("IMAPI2.MsftDiscMaster2")

    ' Create a DiscRecorder object for the specified burning device.
    Dim uniqueId
    set recorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")
    uniqueId = g_DiscMaster.Item(Index)
    recorder.InitializeDiscRecorder( uniqueId )

    ' *** - Formatting to display recorder info
    WScript.Echo "--------------------------------------------------"
    Wscript.Echo " ActiveRecorderId: " & recorder.ActiveDiscRecorder
    Wscript.Echo "       Vendor Id: " & recorder.VendorId
    Wscript.Echo "      Product Id: " & recorder.ProductId
    Wscript.Echo " Product Revision: " & recorder.ProductRevision
    Wscript.Echo "      VolumeName: " & recorder.VolumeName
    Wscript.Echo "  Can Load Media: " & recorder.DeviceCanLoadMedia
    Wscript.Echo "   Device Number: " & recorder.LegacyDeviceNumber
soweit so gut

Delphi-Quellcode:
Procedure TForm5.FormCreate(Sender: TObject);
Var
  Index, I, X: Integer;
  UniqueId, Temp: String;
  SupportedFeature: Integer;
  Safe, VolumePath, CurrentFeature: PSafeArray;
  MountPoint : Variant;
Begin
  Index := 0;
  UniqueId := DiscMaster2.Item[Index];
  DiscRecorder2.InitializeDiscRecorder(UniqueId);
  Memo1.Lines.Add('--------------------------------------------------');
  Memo1.Lines.Add(' ActiveRecorderId: ' + DiscRecorder2.ActiveDiscRecorder);
  Memo1.Lines.Add(' Vendor Id: ' + DiscRecorder2.VendorId);
  Memo1.Lines.Add(' Product Id: ' + DiscRecorder2.ProductId);
  Memo1.Lines.Add(' Product Revision: ' + DiscRecorder2.ProductRevision);
  Memo1.Lines.Add(' VolumeName: ' + DiscRecorder2.VolumeName);
  Memo1.Lines.Add(' Can Load Media: ' + BoolToStr(DiscRecorder2.DeviceCanLoadMedia,True));
    Memo1.Lines.Add(' Device Number: ' +
    Inttostr(DiscRecorder2.LegacyDeviceNumber));


DiscRecorder2.VolumePathNames ist ein PSafeArray

Code:
    Dim mountPoint
    For Each mountPoint In recorder.VolumePathNames
        WScript.Echo "    Mount Point: " & mountPoint
    Next



Delphi-Quellcode:
  for i := 0 to DiscRecorder2.VolumePathNames.cbElements -1 do
   begin
    Memo1.Lines.Add(' Mount Point: ' + PChar(DiscRecorder2.VolumePathNames[i].pvData)); //Array typ erforderlich
   end;
End;

Geändert von Horst0815 (15. Sep 2014 um 17:50 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Umgang mit PSafeArray

  Alt 15. Sep 2014, 09:51
Wenn man mit gedrückter Strg-Taste mit der linken Maustaste auf ".pvData" klickt, wo landet man da und was steht da genau?
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
150 Beiträge
 
Delphi XE Starter
 
#3

AW: Umgang mit PSafeArray

  Alt 15. Sep 2014, 17:50
na PSafeArray is so:

Delphi-Quellcode:
 

 PSafeArray = ^TSafeArray;
  {$EXTERNALSYM tagSAFEARRAY}
  tagSAFEARRAY = record
    cDims: Word;
    fFeatures: Word;
    cbElements: LongWord;
    cLocks: LongWord;
    pvData: Pointer;
    rgsabound: array[0..0] of TSafeArrayBound;
  end;
  TSafeArray = tagSAFEARRAY;
definiert


Kann ja nicht gehen heist ja nicht umsonst PSafeArray


aber

Delphi-Quellcode:
 
  CopyMemory(@Safe,DiscRecorder2.VolumePathNames,DiscRecorder2.VolumePathNames.CbElements);
 For I := 0 To DiscRecorder2.VolumePathNames.CbElements - 1 Do
  Begin

    Memo1.Lines.Add(' Mount Point: ' + (Safe[I]));
  End;
führt zu
[dcc32 Fehler] Main.pas(115): E2149 Klasse besitzt keine Standardeigenschaft
Miniaturansicht angehängter Grafiken
unbenannt.jpg  

Geändert von Horst0815 (15. Sep 2014 um 18:25 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Umgang mit PSafeArray

  Alt 16. Sep 2014, 13:36
Dir ist schon klar das PSafeArray ein Zeiger auf ein record/struct ist und kein Array?
Delphi-Quellcode:
  PSafeArray = ^TSafeArray;
  {$EXTERNALSYM tagSAFEARRAY}
  tagSAFEARRAY = record
    cDims: Word;
    fFeatures: Word;
    cbElements: LongWord;
    cLocks: LongWord;
    pvData: Pointer;
    rgsabound: array[0..0] of TSafeArrayBound;
  end;
  TSafeArray = tagSAFEARRAY;
  {$EXTERNALSYM SAFEARRAY}
  SAFEARRAY = TSafeArray;
Vielleicht hilft dir das auch weiter?
http://blog.virtec.org/2008/07/the-m...of-psafearray/
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz