Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

C++ to Delphi


CodeMaster ©   (2009-02-19 10:00:00) 

Помогите перевести вот эту строчку на Delphi:
typedef VisInfo* (WINAPI *QUERYMODULE)(void);


KilkennyCat   (2009-02-23 16:52:00) [1]


> CodeMaster ©   (23.02.09 12:33) [17]

Bitblt выводит, а эта - просчитывает.
Так ты ее копал, или нет?


CodeMaster   (2009-02-23 12:33:00) [2]

Проблема в том что это процедурка как-раз выводит на экран визуализацию


Сергей М.   (2009-02-22 21:58:00) [3]


> Если её убрать всё нормально


Ну так убери и все будет нормально, в чем проблема-то ?


KilkennyCat   (2009-02-22 21:50:00) [4]

то есть, они не передаются, а возвращаются...
а пчему тогда два W?
мож, одно все-таки надо определить до?
вообщем, копай VisInfo.Render


CodeMaster   (2009-02-22 21:31:00) [5]

они равно ширине и высоте выводящего буффера


KilkennyCat   (2009-02-22 08:52:00) [6]

W,H: integer;
чему равны при передачи в VisInfo.Render?


CodeMaster   (2009-02-22 07:37:00) [7]

Если её убрать всё нормально


Сергей М.   (2009-02-21 21:12:00) [8]


> Вот именно на этой строке


Как узнал что на этой ?


CodeMaster   (2009-02-21 17:56:00) [9]

Вот именно на этой строке:
VisInfo.Render(VisScreen.Bits,W,H,W,VisData);

Появляется такая ошибка невсегда, она появляется при подключении некоторых плагинов (Sonique,AIMP). На плеере AIMP они работают норм, у меня же почему-то отказываются, пишут Floating point division by Zero


DVM   (2009-02-21 17:33:00) [10]


> Программа C2PAS32.exe перевела знак ">>" как shr

ну и правильно перевела.


> Но моя программа почему-то мне постоянно пишет Floating
> point division by Zero.
>

Ну, а на какой строке то это происходит ты сам то выяснить в состоянии?


CodeMaster   (2009-02-21 17:07:00) [11]

unit main;

interface
uses
SysUtils,Windows,Messages,Bass;
 const
  ALPHA_MASK = $FF000000;
  RED_MASK = $00FF0000;
  GREEN_MASK = $0000FF00;
  BLUE_MASK = $000000FF;

  ALPHA_SHIFT = 24;
  RED_SHIFT = 16;
  GREEN_SHIFT = 8;
  BLUE_SHIFT = 0;

  VI_WAVEFORM    = $0001; { Flag para waveform (PCM) }
  VI_SPECTRUM    = $0002; { Flag para espectro (FFT) }
  SONIQUEVISPROC = $0004;
 //end;

type

  PVisData = ^TVisData;
  TVisData = record
     MillSec : DWORD;        { Tempo referente ao final deste bloco de dados }
     WaveForm: array[0..1,0..511] of ShortInt; { Dados PCM sendo retornados no momento }
     Spectrum: array[0..1,0..255] of Byte;
  end;
PVisInfo = ^TVisInfo;
  TVisInfo = record
     Version              : DWORD;
     PluginName           : PChar;
     lRequired            : Integer;
     Initialize           : procedure; cdecl;
     Render               : function(Video: Pointer; Width, Heigth, Pitch: Integer; pVD: PVisData): Boolean; cdecl;
     SaveSettings         : function(FileName: PChar): Boolean; cdecl;
     OpenSettings         : function(FileName: PChar): Boolean; cdecl;
     Deinit               : function: Boolean; cdecl;
     Clicked              : function(x, y, Buttons: Integer): Boolean; cdecl;
  end;
implementation

end.


CodeMaster   (2009-02-21 17:05:00) [12]

Мм возник последний вопрос. Программа C2PAS32.exe перевела знак ">>" как shr. Но моя программа почему-то мне постоянно пишет Floating point division by Zero.

library POGi_Vis;

uses
 SysUtils,
 Classes,
 bass,
 Windows,
 Graphics,
 math,GR32,
 main in 'main.pas';

{$R *.res}
type
TQueryModule = function: PVisInfo; stdcall;
var
VisHandle: THandle;
VisInfo: TQueryModule;
VisData: PvisData;
VisDLLHandle: THandle;

VisBuff: PByte;
W,H: integer;
VisScreen: TBitmap32;
bi: TBitmapInfo;

function POGiVis_PluginFree: Boolean; stdcall; export;
begin

end;
function POGiVis_Render(Hwnd: THandle; HT: HStream): Boolean; stdcall; export;
var
i: integer;
info: Bass_ChannelInfo;
Data: array[0..1025] of DWORD;
FFT: array[0..256] of Single;
begin
if Bass_ChannelIsActive(HT) = BASS_ACTIVE_PLAYING then begin
 new(VisData);
 VisData.MillSec:= Trunc(Bass_ChannelBytes2Seconds(ht,Bass_ChannelGetPosition(HT,BASS_POS_BYTE)) * 1000);
 Bass_ChannelGetInfo(HT,Info);
 if (VisInfo.lRequired and VI_WAVEFORM) = VI_WAVEFORM then begin
    if info.chans = 1 then begin
      Bass_ChannelGetData(HT,@data,1024);
      for i:= 0 to 511 do begin
       VisData.WaveForm[0,i]:= Data[i] shr 8;
       VisData.WaveForm[1,i]:= Data[i] shr 8;
      end;
    end
    else begin
      Bass_ChannelGetData(HT,@data,2048);
       for i:= 0 to 511 do begin
        VisData.WaveForm[0,i]:= Data[i * 2] shr 8;
        VisData.WaveForm[1,i]:= data[(i*2)+1] shr 8;
       end;
    end;
 end;

    if (VisInfo.lRequired and VI_SPECTRUM) = VI_SPECTRUM then begin
       Bass_ChannelGetData(HT,@FFT,BASS_DATA_FFT512);
       for i:= 0 to 255 do begin
         VisData.Spectrum[0,i]:= Min(255,Round(FFT[i] * 512));
         VisData.Spectrum[1,i]:= Min(255,Round(FFT[i] * 512));
       end;
    end;
    end;

    VisScreen.Clear(clRed);
 VisInfo.Render(VisScreen.Bits,W,H,W,VisData);
 BitBlt(HWND,0,0,W,H,VisScreen.Canvas.Handle,0,0,SRCCOPY);

  Dispose(VisData);

end;
function POGiVis_PluginLoad(const FileName: String; nWidth,nHeight: Integer): Boolean; stdcall; export;
begin
VisInfo := nil;
  if VisDLLHandle <> 0 then
  begin
     FreeLibrary(VisDLLHandle);
     VisDLLHandle := 0;
  end;
     VisDLLHandle := LoadLibrary(PChar(filename));
  if (VisDLLHandle = 0) then
     exit;
  @VisInfo := GetProcAddress(VisDLLHandle, 'QueryModule');
  if @VisInfo <> nil then
  begin

     VisInfo.Initialize;

  end;
    W:= nWidth;
    H:= nHeight;
    bi.bmiHeader.biSize:= sizeof(bi.bmiHeader);
   bi.bmiHeader.biWidth:= nWidth;
   bi.bmiHeader.biHeight:= nHeight;
   bi.bmiHeader.biPlanes:= 1;
   bi.bmiHeader.biBitCount:= 32;
   VisScreen:= TBitmap32.Create;
   VisScreen.Width:= nWidth;
   VisScreen.Height:= nHeight;
end;

function POGiVis_Init: Boolean; stdcall; export;
begin
Result:= True;

end;

exports POGiVis_Init,POGiVis_PluginLoad,POGiVis_PluginFree,POGiVis_Render;
begin
end.


CodeMaster   (2009-02-21 16:00:00) [13]

DVM большое спасибо


DVM   (2009-02-21 15:17:00) [14]


> CodeMaster ©

C2PAS32.EXE


KilkennyCat   (2009-02-21 15:06:00) [15]

И прочей отечественной электронике.


CodeMaster   (2009-02-21 14:02:00) [16]

Помогите Плис


CodeMaster   (2009-02-21 08:50:00) [17]

Есть ещё один вопросик - как выглядит вот эта строка в Delphi?
BOOL (*Render)( unsigned long *Video, int width, int height, int pitch, VisData* pVD); /* Function called to Render */


clickmaker   (2009-02-19 11:21:00) [18]

type
 PVisInfo = ^TVisInfo;
 TQUERYMODULE = function: PVisInfo; stdcall;


Наверх

Титульная страница Поиск, карта сайта Написать письмо