1

最近、私はWindowsPhoneの開発に取り組み始めました。

Windows Phone 8ソリューションで、C言語で記述されたプロジェクトを入手しました。ダイナミックリンクライブラリ(DLL)プロジェクトを作成しましたが、正常にビルドできます。その中で、ランタイムコンポーネントプロジェクトを使用して、DLLのメソッドをUI(C#)プロジェクトに提供します。メソッドでは、いくつかのポインタパラメータがあり、Intptrオブジェクトを使用してbyte[]オブジェクトをランタイムコンポーネントプロジェクトに渡します。残念ながら、これによりプログラムがクラッシュしました。

ポインタパラメータをランタイムコンポーネントプロジェクトまたはDLLプロジェクトに渡すにはどうすればよいですか?おそらく、[Dllimort]メソッドを使用してDLLファイルをインポートできる別の方法がありますか?

どんな助けでも大歓迎です!

PS:私のソリューションの構造:

  1. [ダイナミックリンクライブラリプロジェクト(C ++)]。dll_method(void * para);

  2. [ランタイムコンポーネントプロジェクト(C ++)]。rc_method(Intptr p)

    {
       dll_method((void*)p);
    }
    
  3. [Windows Phone 8プロジェクト(C#)]。method()

    {
       GCHandle g = GCHandle.Alloc(byte[], GCHandleType.Pinned);
       IntPtr p = g.AddrOfPinnedObject();
       rc_method(p);
    }
    
4

1 に答える 1

0

リモートプロセス通信を行っている場合を除き、Windows Phoneアプリプロジェクト(C#)からWindows Phoneランタイムコンポーネント(C ++)を呼び出すには、ネイティブプロジェクトを参照として追加するだけです。

WinRTでサポートされている任意の型を引数として渡すことができます。また、コールバックに関しては、イベントを使用することも(同じプロセスの場合)、またはコールバックタイプを渡すこともできます(RPCの場合)。

于 2012-10-19T07:47:54.550 に答える