2

C ++ / CXクラスではパブリック署名にネイティブ型を使用できないため、情報を取得する別の方法を見つける必要があります。インターネットでラッパークラスを作成するための参照をいくつか見つけましたが、実際の実装はありません。コードで次のシナリオを有効にするにはどうすればよいですか?

public ref class MyRefClass
{
public:
    void SetNativeType(NativeType *pType);
};

明らかにこれは機能しません、それでNativeTypeそれが渡されることができるようにどのように私は包むのMyRefClassですか?

これは別のライブラリにあるので、internalキーワードの使用はここでは役に立ちません。

4

2 に答える 2

1

NativeType へのポインターをラップするだけで十分であると仮定すると、Platform::IntPtrを「汎用」パラメーターとして使用できます。

MSDN から:

static IntPtr::operator IntPtr( void* value1);
static IntPtr::operator IntPtr( int value2);
static IntPtr::operator void*( IntPtr value3 );

SetNativeType(NativeType *pType);別の方法として、Windows ストア クラス ライブラリの代わりに、ヘッダー ファイルを含むスタティック ライブラリを内部として配布することもできます。

コメントで言及した警告については、プレーンな C++ クラス MyPlainClass を試して、代わりにその実装を lib ファイルにエクスポートし (内部で他の ref クラスを使用する場合でも)、ヘッダーのみの ref クラス MyRefClass を提供してラップすることができます。 MyPlainClass であり、パブリック インターフェイスとして機能します。このソリューションも完璧ではありません。同じプロジェクトで、lib+header ファイルを使用する 2 つの winrt ライブラリを組み合わせるのに問題があると思いますが、このシナリオをサポートする必要はないかもしれません。

于 2013-01-23T20:24:00.010 に答える
0

WinRT (および COM) は、バイナリ API の互換性という非常に現実的な問題を解決するので、個人的には、これに COM を使用することに決めました。IDL またはタイプ ライブラリを使用せずにプライベート インターフェイスを宣言できます。必要なのは、クライアントにインターフェイス宣言を含むヘッダーを含めることだけです。一致する IID とインターフェイス シグネチャがあれば十分です (ただし、IUnknown ポインターを渡す方法を理解することも必要です)。

于 2014-06-23T09:25:43.647 に答える