2010-11-22 10 views
2

以下のコードを使用してネイティブC++コードでICollectionインターフェイスポインタを作成しようとしています。ネイティブC++コードでICollectionインターフェイスを使用する

ICollectionPtr ptrPopItems (__uuidof(mscorlib::ICollection)); 

しかし、「クラスが登録されていません」というエラーが表示されています。 誰かがこのエラーを解決するのに役立つことができますか?

答えて

1

ICollectionはCOMオブジェクトではありません。これは、動作するために必要なものです。

ICollection^ ptrPopItems = gcnew ArrayList(); 

ICollectionはインターフェイスなので、インターフェイスを実装する具象クラスのインスタンスに設定する必要があります。 ^は管理対象オブジェクトへのポインタであり、gcnewは管理対象オブジェクトnewを呼び出してオブジェクトを作成します。あなたがマネージ拡張せずにC++を使用する必要がある場合は、あなたがC#でクラスを作成する必要があります:

http://en.wikipedia.org/wiki/C%2B%2B/CLI

EDITより多くを学ぶためにWikipediaで、このC++/CLIのページを見てみましょう何をしたいのかを尋ねるクラスにComVisible属性を追加します。

http://msdn.microsoft.com/en-us/library/7fcfby2t.aspx

+0

.Iはそれが解決したが、私は、 – viky

+0

こんにちは、 を別の同様の問題に直面していました私は、コードの以下の部分を使用してIDictonaryのインスタンスを作成し、IDictonary-を利用するようにしようとしていますありがとう>メソッドを追加します。しかし、CoCreateInstanceインスタンスは、登録されていないクラスのエラーで失敗しています。レジストリをチェックすると、CLSIDは使用できません。何が問題なのかを教えてください。 \t IDictionary * pDictionary; HRESULT hr = S_OK; 場合(FAILED(HR =のCoCreateInstance(CLSID_Dictionary、NULL、 CLSCTX_INPROC_SERVER、IID_IDictionary、(無効**)(&pDictionary)))) – viky

+0

CLSID_Dictionaryある{EE09B103-97E0-11CF-978F-00A02463E06F} - HKEY_CLASSES_ROOTの下であなたのレジストリをチェック\ CLSID \ {EE09B103-97E0-11CF-978F-00A02463E06F}が登録されているかどうか確認してください。そうでない場合は、Windows Scripting Hostが正しくインストールされていないか、またはWindows Scripting Hostにアクセスできない可能性があります。 –

関連する問題