2016-10-26 25 views

答えて

0

私はコード(長時間終了する)を掘り起こす必要がありますが、JNI経由でスタティックJavaメソッドに関数ポインタを渡してC++ DLLに渡すことは可能です。この関数ポインタを使用して、書き込みプロセスの更新をJavaアプリケーションに渡すことができます。

  1. はあなたがDDiscFormat2DataEventsからクラスを派生し、機能Advise(..)を使用します(C++で)Javaの

    から
  2. を呼んでいるあなたのC++の関数に関数ポインタを追加します。ここでは

    は、あなたが何をすべきかですDDiscFormat2DataEventsインターフェイスのインターフェイス(「DDiscFormat2DataEventsインターフェイスのUpdate関数を参照してください)の通知を受信するためのインターフェイスです。

  3. あなたは機能Advise(..)を使用することができるようにするために、あなたのIDiscFormat2DataオブジェクトからインターフェースIConnectionPointContainer、その後DDiscFormat2DataEventsを照会する必要があります。

  4. Update関数から、Javaアプリケーションに進行状況情報を渡すためのコールバック関数を呼び出すことができます。

注:

  • C++からの呼び出し「のJavaコールバックは、」Javaは限りこの関数としてのみ、その関数内からコールバックを使用しています(またはC++関数を呼び出す限り、唯一の安全です実行する)。他のすべてのシナリオでは、Java仮想マシンのクラッシュが悪くなります...私はその原因を見いだすことはありませんでしたが、JNIがC++関数呼び出し後に問題を解決すれば、何らかの形で関数ポインタが無効になることが予想されます。

  • 派生クラスが正しく動作するすべてDDiscFormat2DataEventsの機能、IDispatch、およびIUnknownインタフェースを実装する必要があります。あなたはより多くの私に知らせて助けが必要な場合はあなたも...火傷を中止する

をこのコールバックメカニズムを使用することができます

  • ...

  • +0

    はあなたの助けをありがとう –

    関連する問題