程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在 Delphi 下使用 DirectSound (1): 枚舉設備

在 Delphi 下使用 DirectSound (1): 枚舉設備

編輯:Delphi

 現在的 Delphi(2010、XE) 已經自帶了 DirectX 的相關單元(...\source\rtl\win\).

//枚舉函數 
function DirectSoundEnumerate( 
  lpDSEnumCallback: TDSEnumCallback; //回調函數 
  lpContext: Pointer                //用戶指針 
): HResult; stdcall; //返回錯誤代碼, 成功則返回 DS_OK(0) 
 
//DirectSoundEnumerate 需要的回調函數的原形: 
TDSEnumCallback = function( 
  lpGuid: PGUID;            //設備的 GUID 
  lpcstrDescription: PChar; //設備描述 
  lpcstrModule: PChar;      //模塊標識 
  lpContext: Pointer        //由 DirectSoundEnumerate 提供的用戶指針 
): BOOL; stdcall; //返回 True 表示要繼續枚舉, 不在繼續找了就返回 False 

  這是常見的代碼:

unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls; 
 
type 
  TForm1 = class(TForm) 
    ListBox1: TListBox; //只在窗體上放了一個列表框 
    procedure FormCreate(Sender: TObject); 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
uses DirectSound; //! 
 
function EnumCallback(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PChar; 
    lpContext: Pointer): BOOL; stdcall; 
begin 
  Form1.ListBox1.Items.Add(lpcstrDescription); 
  Result := True; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  DirectSoundEnumerate(EnumCallback, nil); 
end; 
 
end. 

  在回調函數中直接使用窗體控件不好, 修改如下:

uses DirectSound; 
 
function EnumCallback(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PChar; 
    lpContext: Pointer): BOOL; stdcall; 
begin 
  TStrings(lpContext).Add(lpcstrDescription); 
  Result := True; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  DirectSoundEnumerate(EnumCallback, ListBox1.Items); 
end; 

  獲取更多信息:

uses DirectSound; 
 
function EnumCallback(lpGuid: PGUID; lpcstrDescription, lpcstrModule: PChar; 
    lpContext: Pointer): BOOL; stdcall; 
begin 
  if lpGuid <> nil then TStrings(lpContext).Add(GUIDToString(lpGuid^)); 
  TStrings(lpContext).Add(lpcstrDescription); 
  if lpcstrModule <> nil then TStrings(lpContext).Add(lpcstrModule); 
  TStrings(lpContext).Add(EmptyStr); 
  Result := True; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  DirectSoundEnumerate(EnumCallback, ListBox1.Items); 
end; 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved