CSCoreを使い始めたばかりで、多くのC++の後でC#に戻っています。ここでは、デフォルトのオーディオセッションマネージャのオーディオセッションを列挙したテストプログラムです、とそれぞれに空のイベントハンドラをアタッチ:CSCore:オーディオセッションイベントを聞くとアクセス違反が発生する
using System;
using CSCore.CoreAudioAPI;
class Program
{
static void Main(string[] args)
{
using (var enumerator = new MMDeviceEnumerator())
using (var device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia))
using (var sessionManager = AudioSessionManager2.FromMMDevice(device))
using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
{
foreach (var control in sessionEnumerator)
{
var control2 = control.QueryInterface<AudioSessionControl2>();
RegisterAudioSession(control2);
}
}
Console.WriteLine("Waiting...");
Console.ReadKey();
}
static void RegisterAudioSession(AudioSessionControl2 session)
{
if (session.Process != null)
{
var events = new AudioSessionEvents();
session.RegisterAudioSessionNotification(events);
}
}
}
このプログラムがある間、私は自分のコンピュータの音量を変更できるように期待
問題なく走っています。ただし、これを試すと、プログラムはネイティブコードでアクセス違反でクラッシュします。ここでスタックトレースです:
> AudioSes.dll!CLockedList<ATL::CComPtr<IAudioSessionEvents>,0,1>::ForEachEntry() Unknown
AudioSes.dll!CAudioSessionControl::OnAudioSessionEvent() Unknown
AudioSes.dll!CAudioSessionControl::CAudioSessionNotificationDelegator::OnMediaNotification(struct MEDIA_NOTIFICATION_BLOCK *) Unknown
MMDevAPI.dll!CMediaNotifications::OnMediaNotificationWorkerHandler(struct _TP_CALLBACK_INSTANCE *) Unknown
MMDevAPI.dll!CMediaNotifications::MediaNotificationWorkerHandler(struct _TP_CALLBACK_INSTANCE *,void *) Unknown
ntdll.dll!TppSimplepExecuteCallback() Unknown
ntdll.dll!TppWorkerThread() Unknown
[email protected]@12() Unknown
ntdll.dll!__RtlUserThreadStart() Unknown
[email protected]() Unknown
あなたはRegisterAudioSessionNotification
への呼び出しを削除するとクラッシュが発生しません。
空でないイベントハンドラを登録すると、クラッシュが発生します。
必要なリソースが処分されているにも関わらず、使用ブロックにConsole.ReadKey();
を移動しようとしましたが、失敗しました。
ここでは説明と解決方法を探しました。 CSCoreのgithubページに関連する未解決の問題はありません。私は、ネイティブコードのクラッシュは、しばしばラッパーアセンブリの不正なシグニチャーによって引き起こされると読んでいます。 CSCoreのIAudioSessionEventsのすべてのメソッドをネイティブのIAudioSessionEventsメソッド(hereに列挙)と比較しましたが、明白な矛盾は見つかりませんでした。
This Firefox bugは、この特定のスタックトレースにオンラインで見つかった唯一の参考資料であり、解決されました。明らかに、Flash Player 19.0.0.159で解決されましたが、ソースが閲覧に利用できないことがわかっている限りは、
私のコードでエラーが見落とされていますか、これはCSCoreのバグですか?