Avatar billede angelod Novice
18. september 2002 - 16:16 Der er 10 kommentarer og
1 løsning

Array -> Pointers ??

Jeg sidder og leger med Windows' AVIFile API, fra Video for Windows pakken. Det har indtil nu gået meget fint, men jeg er så stødt på et problem jeg ikke kan klare selv, så hvor søger man så hjælp henne? Eksperten selvfølgelig! Nu håber jeg bare at der er hjælp at hente. ;)

Funktionen jeg skal kalde er erklæret som følger:

function    AVISaveOptions(
    hwnd            : HWND;
    uiFlags        : UINT;
    nStreams        : int;
    var ppavi      : PAVISTREAM;
    var plpOptions  : PAVICOMPRESSOPTIONS
    ): BOOL; stdcall;

Og det er jo meget fint, problemet er blot at 'ppavi' og 'plpOptions' skal være arrays, men typerne PAVISTREAM og PAVICOMPRESSOPTIONS er pointers til en enkelt structure.

I C/C++ kan man kalde funktionen med en reference til et array, og det fungerer som en pointer.. Det prøvede jeg i Delphi, og fik fejlen:
  "Types of actual and formal var parameters must be identical"

Jeg håber der er en ekspert som kan hjælpe mig med dette problem. :o)
Avatar billede angelod Novice
18. september 2002 - 16:21 #1
Glemte lige at skrive, at hvis antallet af point ikke er nok, så kan vi nok finde ud af at hæve det. :o)
Avatar billede cms Nybegynder
18. september 2002 - 16:41 #2
Prøv med en lokal variabel som du tildeler typen PAVIStream osv. som du så sender videre til AVISaveOptions
Avatar billede angelod Novice
18. september 2002 - 16:47 #3
Det kan jeg godt, hvis jeg siger at der kun er en enkelt stream, men problemet er jo at jeg har 2 streams, 1 til lyd og en til video. Med denne funktion er det ikke så slemt da jeg kan kalde funktionen 2 gange, men jeg skal bruge det igen på et senere tidspunkt, så jeg bliver nødt til at finde en løsning.
Avatar billede loke-liscom Nybegynder
19. september 2002 - 00:00 #4
det plejer vist at være sådan at hvis der er en type der hedder pEtEllerAndet så er den erklæret:

type
  pEtEllerAndet : ^TEtEllerAndet

så har du prøvet:

MineStreams : array[1..2] of TAviStream;
MineOpsions : arrat[1..2] of TAviCompressOptions;

AVISaveOptions(bla,bla,2,@MineStreams[1],@MineOptions[1]);

//Det er dog kun et gæt
//Klaus
Avatar billede angelod Novice
19. september 2002 - 00:05 #5
Okay jeg legede selv lidt mere med det, og fandt frem til løsningen der er, at rette i erklæringerne, og oprette nye datatyper der holder et array. Det er en lidt klodset løsning syntes jeg, men det virker da.

Ellers tak for jeres råd. Selvom det ikke ledte til en løsning denne gang, så er det altid rart at der er folk på Eksperten som er villige til at gøre et forsøg. :o)
Avatar billede loke-liscom Nybegynder
19. september 2002 - 00:09 #6
Har du afprøvet det jeg sagde? jeg kunne ikke teste det da jeg ikke ved vilken unit vfw ligger i. men f.eks her er erklæringen på tnotifyicondata

PNotifyIconDataA = ^TNotifyIconDataA;
  PNotifyIconDataW = ^TNotifyIconDataW;
  PNotifyIconData = PNotifyIconDataA;
  {$EXTERNALSYM _NOTIFYICONDATAA}
  _NOTIFYICONDATAA = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
    szTip: array [0..63] of AnsiChar;
  end;
  {$EXTERNALSYM _NOTIFYICONDATAW}
  _NOTIFYICONDATAW = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
    szTip: array [0..63] of WideChar;
  end;
  {$EXTERNALSYM _NOTIFYICONDATA}
  _NOTIFYICONDATA = _NOTIFYICONDATAA;
  TNotifyIconDataA = _NOTIFYICONDATAA;
  TNotifyIconDataW = _NOTIFYICONDATAW;
  TNotifyIconData = TNotifyIconDataA;
  {$EXTERNALSYM NOTIFYICONDATAA}
  NOTIFYICONDATAA = _NOTIFYICONDATAA;
  {$EXTERNALSYM NOTIFYICONDATAW}
  NOTIFYICONDATAW = _NOTIFYICONDATAW;
  {$EXTERNALSYM NOTIFYICONDATA}
  NOTIFYICONDATA = NOTIFYICONDATAA;
Avatar billede angelod Novice
19. september 2002 - 00:15 #7
Nej jeg har ikke fået afprøvet det, da jeg sidder med et andet projekt lige nu der presser lidt på, men jeg skal nok se om jeg kan få afprøvet det imorgen, og hvis det viser sig at være løsningen, så skal jeg nok oprette et nyt spørgsmål til dig, så du kan få dine 100 point. :o)
Avatar billede loke-liscom Nybegynder
19. september 2002 - 00:18 #8
Det var ikke for de 100 point det var mere fordi næste alle windows api kaldene er lavet på den måde. Så skal du jo rette i typerne hver gang du skal bruge api kald
Avatar billede angelod Novice
19. september 2002 - 00:21 #9
Jepper, og det er også det jeg er træt af, hvorfor du ærligt fortjener de point hvis det virker. Du skal da bestemt ikke bøde for at jeg er for hurtig på "aftrækkeren" :o)
Avatar billede loke-liscom Nybegynder
20. september 2002 - 12:28 #10
Hvad så, virker det?

//klaus
Avatar billede angelod Novice
20. september 2002 - 12:30 #11
Det kan du lige tro det gør! (Beklager forsinkelsen. Skulle have trukket en flækket tand ud, hvilket medførte *meget* bedøvelse, og *meget* smerte da bedøvelsen var væk)

Poster lige et spørgsmål til dig. :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester