1

この C# イベントを公開する DLL があります。

[Serializable]
public delegate object[] MyEventHandler(object[] data);

event MyEventHandler MyEvent;

それにサブスクライブするpythonコード:

...
def MyPythonEventHandler(source, args):
    print 'Inside Event Handler'
...
ref.MyEvent += MyPythonEventHandler
...

DLL がイベントを発生させるとき、MyPythonEventHandler の print ステートメントには到達しません。代わりに、Python は ConversionException をスローします。例外はシリアル化できないため、DLL は実際に次の例外を受け取ります。

System.Runtime.Serialization.SerializationException: Type 'Python.Runtime.
ConversionException' in Assembly 'Python.Runtime, Version=2.0.0.2, Culture=neutral,
PublicKeyToken=null' is not marked as serializable.

したがって、どの変換が試行され、失敗しているのかを実際にはわかりません。

私はこの DLL からの他のイベント コールバックを正常に処理したので、この失敗はこの特定のイベントのデリゲート シグネチャに関係していると推測しています。Python ハンドラーの署名が間違っていますか?

ありがとう、ジム

4

1 に答える 1

0

デリゲート、イベント、およびイベントを発生させる Run メソッドを含む 1 つのクラスを含む必要最小限の DLL を作成しました。オブジェクトを作成し、サブスクライブして実行するために、Python を削除しました。MyPythonEventHandler という名前の関数を宣言していないことを示すエラーがすぐに発生しました。名前に誤字を発見。

Python が元のスクリプトでこのエラーを返さなかった理由はわかりませんが、名前を修正したので動作します。

于 2013-11-04T14:45:31.827 に答える