0

WindowsPhone8のWindows::Devices::Sensors名前空間でC++Accelerometerインターフェイスを使用しようとしています。コードは、動作するC#プロジェクトと非常によく似ていますが、C++イベントを取得できません。 C#コードでできるように起動します。

私のC++コードはC++コンポーネントを備えたC#プロジェクトであり、C ++コンポーネントは、読み取り用に加速度計デバイスを開くだけで、データの準備ができるたびに発生するイベントを設定しようとします。

AccelerometerWrapper::AccelerometerWrapper() {
    Accelerometer^ acc = Accelerometer::GetDefault();
    accReading = acc->ReadingChanged::add( ref new TypedEventHandler<Accelerometer^, AccelerometerReadingChangedEventArgs^>(this, &AccelerometerWrapper::ReadingChanged));
}

void AccelerometerWrapper::ReadingChanged(Accelerometer^ sender, AccelerometerReadingChangedEventArgs^ e) {
    ...
}

残念ながら、私のReadingChanged()関数は呼び出されません。方法などを探しましたStart()が、何も見つかりません。私はほとんどの知識をAccelerometerCPPの例に基づいていますが、これは一般的なWinRT(Windows Phone8ではなくWindows8など)の例であり、コンピューターに加速度計がないため、実際にテストすることはできません。すべてがコンパイルされて実行され、イベントがトリガーされることはありません。

編集:手動で呼び出すことができることを確認するためのテストを正常に実行したacc->GetCurrentReading()ので、加速度計は機能していますが、トリガーされていないイベントのようです。

前もって感謝します!

4

1 に答える 1

1

私はC++の専門家ではありませんが、新しい加速度センサーはC#を使用して私のマシンで動作します。

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    var accelerometer = Accelerometer.GetDefault();
    if (accelerometer != null)
    {
        accelerometer.ReadingChanged += accelerometer_ReadingChanged;
    }
}

void accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
{
    Debug.WriteLine(args.Reading.AccelerationX + ", " + args.Reading.AccelerationY + "," + args.Reading.AccelerationZ);
}

そのコードスニペットを実行すると、次の期待される出力が表示されます。
出力

C ++の推測ですが、Accelerometerインスタンスをスコープ外にするのではなく、どこかにキャッシュする必要がありますか?

于 2013-01-24T02:00:14.643 に答える