Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wie C "VarData.pArray" variant in pascal konvertieren? (https://www.delphipraxis.net/144302-wie-c-vardata-parray-variant-pascal-konvertieren.html)

Meta777 4. Dez 2009 17:16


wie C "VarData.pArray" variant in pascal konvertie
 
huhu,

wie kann ich folgenden C++ source nach pascal / delphi konvertieren?


Code:
   unsigned char
      *pData = NULL;
   SAFEARRAY
      *psa = NULL;

.....
   psa = varData.parray;
   hr = SafeArrayAccessData(psa, (void **)&pData);
...
..
.
Genauer gesagt geht es mir (wie im Titel erwähnt) um "varData.parray".
meine Versuche habenicht funktioniert:
psa := VarData.pArray;
oder
psa := VarArrayAsPSafeArray(varData.parray);

bin für jeden hinweis dankbar.

Shalom

EDIT:
habe die varialben wie folgend deklariert (weiß nicht ob richtig ist)
Delphi-Quellcode:
pData: Pointer;//unsigned char
psa: PVarArray;//SAFEARRAY;

himitsu 4. Dez 2009 17:29

Re: wie C "VarData.pArray" variant in pascal konve
 
vermutlich erstmal ein Variant-Array erstellen
- einfach ein Array dem Variant zuweisen
- oder über VarArrayCreate und seine Freunde

und dann mit VarArrayAsPSafeArray aus diesem Variant ein SaveArray machen

:gruebel:

Meta777 4. Dez 2009 17:47

Re: wie C "VarData.pArray" variant in pascal konve
 
Zitat:

Zitat von himitsu
vermutlich erstmal ein Variant-Array erstellen
- einfach ein Array dem Variant zuweisen
- oder über VarArrayCreate und seine Freunde

und dann mit VarArrayAsPSafeArray aus diesem Variant ein SaveArray machen

:gruebel:

hi himitsu,

ich hab nur eine veriante von VarArrayCreate()?Und bei dieser hab ich kein passenden parameter - kann also nicht das varDAta.parray übergeben..
Was genau meinst du mit "einfach ein Array dem Variant zuweisen"? wie kann ich dann das varData.parray einer variable vom Type PVarArray zuweisen??

thx

himitsu 4. Dez 2009 19:33

Re: wie C "VarData.pArray" variant in pascal konve
 
Wo kommt varData her, bzw. pData oder wird pData mit dem Inhalt vom varData gefüllt?
Ist ja nicht grad viel von dem unverständlichen C-Code.

Willst du das Aray erstllen/befüllen oder auslesen?

Meta777 7. Dez 2009 12:08

Re: wie C "VarData.pArray" variant in pascal konve
 
Zitat:

Zitat von himitsu
Wo kommt varData her, bzw. pData oder wird pData mit dem Inhalt vom varData gefüllt?
Ist ja nicht grad viel von dem unverständlichen C-Code.

Willst du das Aray erstllen/befüllen oder auslesen?

VarData vom Typ Variant ist ein Parameter eines Events. Der Source-Schnipsel ist aus einem C-Beispiel-Schnipsel der Dokumentation zu dem ActiveX-Control. Original Deklaration der Funktion mit dem relevanten Teil:
Code:
HRESULT CSample::OnStartScan(short a_nStatus,
                             short a_nFilmNumber,
                             long a_nBytesRead,
                             long nTotalBytesRead,
                             VARIANT varData)
{
   HRESULT
      hr = S_OK;
   unsigned char
      *pImageData = NULL;
   short
      result = 0;
   SAFEARRAY
      *psa = NULL;
...
..
.
//////////// D E R  R E L E V A N T E  T E I L ////////////

         psa = varData.parray;
         //                                                   
         // Lock the safearray to access the data it contains
         //                                                   
         hr = SafeArrayAccessData(psa, (void **)&pImageData);
         if (FAILED(hr)) {
            goto exit;
         }
Mein Problem ist, dass ich in Delphi bisher keine passende Lösung gefunden habe (siehe posting #1)

shalom

Meta777 14. Dez 2009 18:40

Re: wie C "VarData.pArray" variant in pascal konve
 
habe jetzt scheinbar eine lösung gefunden, jedenfalls gibt es mit folegendem Code keine exception:
Delphi-Quellcode:
var
  pImageData: Pointer;
  psa: PVarArray;//nicht PSafeArray - war in C vom Typ "SAFEARRAY";
...
begin
  psa := VarArrayAsPSafeArray(varData);
  hr := SafeArrayAccessData(psa, pImageData);
...
..
.
Shalom


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 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