VC++2005でArrayListを使おうとしています。
クリスライブラリで作成しMFCを使います。
名前空間: System.Collections
アセンブリ: mscorlib
とのことなので、
#include "stdafx.h"
#include "afx.h"
#using <mscorlib.dll>
using namespace System::Collections;
と書いてみたのですが、うまく行きません。
ArrayList* AL; ←ここで、
"エラーC4430:型指定子がありません-intと仮定しました"を返します。
どなたか解決方法をご存知の方がいたら教えてください。
よろしくお願いいたします。
向こうでも回答しましたが、ArrayListを使う必要性は何でしょうか?
ArrayListにはSystem::Object^ 型を格納しますが、
MFCではこの型は出現しませんし。
普通ならば、CArray,CList,vector,list等を使います。
ちなみに、MFCと.Net Frameworkを一緒に使う方法ですが、
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200607/06070052.txt
でも回答しましたが、MSDNのとおりにオプションを設定し、コンパイルしても
実行時エラーになってしまうようです。
ですので、やはりMFCと.Net Frameworkは別次元のものだと前提して考えたほうが良いです。
# 近々MSDNフォーラムでこのことについて質問をしようと考えていますが。
ありがとうございました。
やはり、MFCと.Net Frameworkを一緒に使うのは無理みたいですね。
CObArrayを使用してみることにしました。
よく実験してみたところ、MFCでも使用可能なようです。
勘違いしていたようで、
http://msdn2.microsoft.com/ja-jp/library/ms235211.aspx
はMFCプロジェクトを主体に書かれた記述で、このとおり設定すれば、
ArrayListは#usingの記述なしで使えます。
ただし、ArrayList^ しないととダメですが。
例)
void CCLRTestDlg::OnBnClickedButton1()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
System::Collections::ArrayList^ a;
a = gcnew System::Collections::ArrayList();
a->Add( L"Test" );
System::String^ s = static_cast< System::String^ >( a[ 0 ] );
CString str( s );
AfxMessageBox( str );
}
しかしながら、以前もレスしましたが、CString型変数とうSystem::Object型の派生クラスでないものは
格納できません。
また、アンマネージドクラス(たとえばダイアログクラス)のメンバ変数に持つこともできません。
教えていただいた方法でArrayList使えました。
が、メンバ変数に持ちたかったので結局は使いませんが。。
どうもありがとうございました。
書き忘れていましたが、なぜArrayListを使いたかったかというと、
ジェネリックの型パラメータを使用したかったからです。
マネージ型を操作するネイティブ関数に対してテンプレートを採用
しながら、汎用型に対して一定の型保証をする…なんてことはやっ
てられないので、地道に作っていくことにしました。
ツイート | ![]() |