Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.011 c
15-1234457795
Кое кто
2009-02-12 19:56
2009.04.12
Если здесь любители Астрофизики...


2-1235628148
CodeMaster
2009-02-26 09:02
2009.04.12
TListBox and DrawItem


15-1234450115
Типа самый умный
2009-02-12 17:48
2009.04.12
Создание экспортируемой функции в ехе


2-1235489040
cosinus
2009-02-24 18:24
2009.04.12
Как получить handle контрола в чужом приложении?


2-1235503620
dmitry_12_08_73
2009-02-24 22:27
2009.04.12
Проверка на открытое окно в приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский