2012-01-24 8 views
2

異なるハードウェアプラットフォーム上のバーコードスキャナとインターフェイスする.netCFアプリケーションを作成しています。 I.E. MotorolaまたはIntermecなど。自分のDLLを自分のものでラップして共通のインターフェースを表示し、実行時にDLLをReflection LoadFrom()でロードしてからメソッド参照を取得しています。.netCFのDLLにコールバックデリゲートを渡す方法

1つの例外を除いて、私のDLL内のメソッドにほとんどのパラメータを渡すことができます。私はdllにコールバック関数を渡す必要があります。そうすれば、読み込みが発生したときにメインプログラムに戻り、読み込まれたバーコードを処理します。

私がこのメソッドを呼び出すと、ArgumentExceptionがスローされます。

私の質問は、私のdllにこのメソッド参照を渡すか、これを行うためのよりよい方法がありますか?

public delegate void ReadNotify(BCReadData readData); 

    public void AttachReadNotify(ReadNotify ReadNotifyHandler) 
    { 
     if (type == ReaderType.UNKNOWN || scanIntf == null) 
      return; 
     try 
     { 
      setReadNotify.Invoke(scanIntf,new Object [] {ReadNotifyHandler}); 
     } 
     catch (Exception e) 
     { 
      throw new Exception("Unable to set notify handler" + e.Message); 
     } 

    } 
+1

ネイティブメソッドの署名はどのように見えますか? – Groo

答えて

0

ネイティブコールバックが__stdcall呼び出し規約を使用している場合は、Marshal.GetFunctionPointerForDelegateメソッドを使ってこれを実現することができます。

関連する問題