Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.12;
Скачать: CL | DM;

Вниз

C++ to Delphi   Найти похожие ветки 

 
CodeMaster ©   (2009-02-19 10:00) [0]

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


 
clickmaker ©   (2009-02-19 11:21) [1]

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


 
CodeMaster ©   (2009-02-21 08:50) [2]

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


 
CodeMaster ©   (2009-02-21 14:02) [3]

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


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

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


 
DVM ©   (2009-02-21 15:17) [5]


> CodeMaster ©

C2PAS32.EXE


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

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


 
CodeMaster ©   (2009-02-21 17:05) [7]

Мм возник последний вопрос. Программа 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 17:07) [8]

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.


 
DVM ©   (2009-02-21 17:33) [9]


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

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


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

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


 
CodeMaster ©   (2009-02-21 17:56) [10]

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

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


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


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


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


 
CodeMaster ©   (2009-02-22 07:37) [12]

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


 
KilkennyCat ©   (2009-02-22 08:52) [13]

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


 
CodeMaster ©   (2009-02-22 21:31) [14]

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


 
KilkennyCat ©   (2009-02-22 21:50) [15]

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


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


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


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


 
CodeMaster ©   (2009-02-23 12:33) [17]

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


 
KilkennyCat ©   (2009-02-23 16:52) [18]


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.04.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
9-1178736548
AVE
2007-05-09 22:49
2009.04.12
Алгоритм решалки Fiver


15-1234284263
AlexDan
2009-02-10 19:44
2009.04.12
Очень нужна обкатка проекта.


15-1234338924
Дмитрий С
2009-02-11 10:55
2009.04.12
Изменение прав доступа NTFS через какой либо COM obj.


4-1208164694
(Монстр)
2008-04-14 13:18
2009.04.12
Модем, и его статус/состояние...


2-1235568143
Sandman
2009-02-25 16:22
2009.04.12
вытащить из строки определенные данные. как?