AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi wie C "VarData.pArray" variant in pascal konvertieren?
Thema durchsuchen
Ansicht
Themen-Optionen

wie C "VarData.pArray" variant in pascal konvertieren?

Ein Thema von Meta777 · begonnen am 4. Dez 2009 · letzter Beitrag vom 14. Dez 2009
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

wie C "VarData.pArray" variant in pascal konvertie

  Alt 4. Dez 2009, 17:16
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 4. Dez 2009, 17:29
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

Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 4. Dez 2009, 17:47
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

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 4. Dez 2009, 19:33
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 7. Dez 2009, 12:08
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
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

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

  Alt 14. Dez 2009, 18:40
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
  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 03:16 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