54 lines
1.9 KiB
Rust
54 lines
1.9 KiB
Rust
|
extern crate libc;
|
||
|
extern crate winapi;
|
||
|
|
||
|
#[link(name = "uuid")]
|
||
|
extern "C" {
|
||
|
static CLSID_MMDeviceEnumerator: winapi::CLSID;
|
||
|
static IID_IMMDeviceEnumerator: winapi::IID;
|
||
|
}
|
||
|
|
||
|
fn create() -> Result<(), String> {
|
||
|
unsafe {
|
||
|
|
||
|
try!(check_result(winapi::CoInitializeEx(::std::ptr::null_mut(), 0)));
|
||
|
|
||
|
let enumerator = {
|
||
|
let mut enumerator: *mut winapi::IMMDeviceEnumerator = ::std::mem::uninitialized();
|
||
|
|
||
|
let hresult = winapi::CoCreateInstance(&CLSID_MMDeviceEnumerator,
|
||
|
::std::ptr::null_mut(), winapi::CLSCTX_ALL,
|
||
|
&IID_IMMDeviceEnumerator,
|
||
|
::std::mem::transmute(&mut enumerator));
|
||
|
|
||
|
try!(check_result(hresult));
|
||
|
enumerator.as_mut().unwrap()
|
||
|
};
|
||
|
|
||
|
// getting the default end-point
|
||
|
let device = {
|
||
|
let mut device: *mut winapi::IMMDevice = ::std::mem::uninitialized();
|
||
|
let f = enumerator.lpVtbl.as_ref().unwrap().GetDefaultAudioEndpoint;
|
||
|
let hresult = f(enumerator, winapi::EDataFlow::eRender, winapi::ERole::eConsole,
|
||
|
::std::mem::transmute(&mut device));
|
||
|
try!(check_result(hresult));
|
||
|
device.as_mut().unwrap()
|
||
|
};
|
||
|
|
||
|
// activating
|
||
|
let audio_client = {
|
||
|
//let mut audio_client: *mut winapi::IAudioClient = ::std::mem::uninitialized();
|
||
|
let f = device.lpVtbl.as_ref().unwrap().Activate;
|
||
|
//let hresult = f(IID_IAudioClient, winapi::CLSCTX_ALL, ::std::ptr::null_mut(),
|
||
|
// ::std::mem::transmute(&mut audio_client));
|
||
|
//try!(check_result(hresult));
|
||
|
};
|
||
|
};
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
fn check_result(result: winapi::HRESULT) -> Result<(), String> {
|
||
|
// TODO:
|
||
|
Ok(())
|
||
|
}
|