VC++2005でArrayListを使うには?

解決


moe  2006-08-23 07:30:48  No: 62795

VC++2005でArrayListを使おうとしています。
クリスライブラリで作成しMFCを使います。
    名前空間: System.Collections
    アセンブリ: mscorlib 
とのことなので、

#include "stdafx.h"
#include "afx.h"
#using <mscorlib.dll> 
using namespace System::Collections;

と書いてみたのですが、うまく行きません。

ArrayList* AL;      ←ここで、

"エラーC4430:型指定子がありません-intと仮定しました"を返します。
どなたか解決方法をご存知の方がいたら教えてください。
よろしくお願いいたします。


Blue  2006-08-23 08:02:30  No: 62796

向こうでも回答しましたが、ArrayListを使う必要性は何でしょうか?

ArrayListにはSystem::Object^ 型を格納しますが、
MFCではこの型は出現しませんし。

普通ならば、CArray,CList,vector,list等を使います。


Blue  2006-08-23 08:06:23  No: 62797

ちなみに、MFCと.Net Frameworkを一緒に使う方法ですが、

http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200607/06070052.txt
でも回答しましたが、MSDNのとおりにオプションを設定し、コンパイルしても
実行時エラーになってしまうようです。

ですので、やはりMFCと.Net Frameworkは別次元のものだと前提して考えたほうが良いです。

# 近々MSDNフォーラムでこのことについて質問をしようと考えていますが。


moe  2006-08-25 06:48:42  No: 62798

ありがとうございました。
やはり、MFCと.Net Frameworkを一緒に使うのは無理みたいですね。
CObArrayを使用してみることにしました。


Blue  2006-08-28 02:42:05  No: 62799

よく実験してみたところ、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型の派生クラスでないものは
格納できません。
また、アンマネージドクラス(たとえばダイアログクラス)のメンバ変数に持つこともできません。


moe  2006-08-29 05:02:47  No: 62800

教えていただいた方法でArrayList使えました。
が、メンバ変数に持ちたかったので結局は使いませんが。。
どうもありがとうございました。


moe  2006-08-29 05:30:51  No: 62801

書き忘れていましたが、なぜArrayListを使いたかったかというと、
ジェネリックの型パラメータを使用したかったからです。
マネージ型を操作するネイティブ関数に対してテンプレートを採用
しながら、汎用型に対して一定の型保証をする…なんてことはやっ
てられないので、地道に作っていくことにしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加