プロが教える店舗&オフィスのセキュリティ対策術

お世話になっております。
表題についていろいろ調べたのですがエラーの解決方法が見つからないため、質問させてください。
環境はVC++2005 CLD windowsフォームアプリケーション です。

貼り付けたリストボックスにtxtファイルをドラッグドロップして中身を取り出したいのですが、dragdrop関数内で、ファイルのパスを抜き出す部分でエラーが解決できません。

環境に合わせて下記のようなdragdrop関数を作成中です。
System::Void Form1::commandListBox_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
if(e ->Data ->GetDataPresent(DataFormats::FileDrop)){ // ファイルドロップのとき
std::string files[] = (std::string[])(e->Data->GetData(DataFormats::FileDrop));
}
}

最後の行はMSDNなどで書かれていた
string[] files = (string[])(e.Data.GetData(DataFormats.FileDrop));
となっている部分を参考にしているつもりですが、この部分で下記のエラーがでます。

1>.\mySrc\tab0.cpp(45) : error C2440: '型キャスト' : 'System::Object ^' から 'std::string []' に変換できません。
1> 配列型への変換はありませんが、参照またはポインタから配列への変換があります。
1>.\mySrc\tab0.cpp(45) : error C2075: 'files' : 配列の初期化には中かっこ ({}) が必要です。



このエラーの解決方法か、ドラッグドロップしたファイルのパスを取得する方法をご教授頂ければ幸いでございます。

よろしくお願いいたします。

A 回答 (1件)

std::string[] を使うより cli::array<String^>^ を使う方が無難だと思います



array<String^>^arDrops = (array<String^>^)e->Data->GetData( DataFormats::FileDrop );
といった具合で取り出して
for( int n = 0; n < arDrops->Length; n++ ) {
  String ^sName = arDrops[n];
  // Dropされたファイルの個別の処理
}

といった具合でしょう
    • good
    • 0
この回答へのお礼

教えていただいたとおりで実現できました!ありがとうございました。

お礼日時:2008/08/03 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!