マネージでアンマネージを使用

[戻る]
じゃぱん 2008/07/04(金) 01:05:50
始めまして、VC++である問題の解決方法を調べていたらここにたどり着きました。
初心者なので基本的な質問をしてしまうかもしれませんがよろしくおねがいします。

その問題というのはアンマネージで開発していたコードをマネージを使用したコードに
変更したいのですが方法がわかりません。
マップなどを使用している箇所でマネージでアンマネージは使えませんというようなエ
ラーが出てしまいます。

開発環境はWindowsXPのVS2005です。

よろしくお願いします。

επιστημη [HomePage] 2008/07/04(金) 05:55:16
managedオブジェクトはmap(およびあらゆるSTLコンテナ)の要素にはなれません。
VS2008(VC++9)に乗り換えられるなら、STL/CLRが使えますが。

επιστημη [HomePage] 2008/07/04(金) 06:58:15
VS2005ならSystem::Collections::Generic::SortedDictionary<K,T>にportするか。

じゃぱん 2008/07/05(土) 00:23:00
回答ありがとうございます。
ただ解決はできませんでした。

>VS2008(VC++9)に乗り換えられるなら
というのは客先からVS2005での開発を指定されているのでこれは無理です。
VS2005での解決方法をよろしくお願いします。

また
>managedオブジェクトはmap(およびあらゆるSTLコンテナ)の要素にはなれません。
というのは今回の状況とは少し違うと思います。
今回の状況はマネージドクラスの中でマップを使用したり、マップを関数の引数として
受け取りたいというものです。
(マネージを使用するのもマップを使用するのも客先から指定されています。)

この解決方法についていい方法がありましたらよろしくお願いします。

επιστημη [HomePage] 2008/07/05(土) 01:52:49
unmanagedのポインタならもてますよ。

public ref class Foo {
private:
  std::map<int,int>* m;
public:
  Foo() { m = new std::map<int,int>(); }
 ~Foo() { this->!Foo(); }
 !Foo() { delete m; m = 0; }
};

επιστημη [HomePage] 2008/07/05(土) 02:29:32
>(マネージを使用するのもマップを使用するのも客先から指定されています。)

ちょいと気になるんだけど、お客さんはmanagedがいかなるものか、
よくよく承知の上でそんな要求を出してきてるんですよね?

> 今回の状況はマネージドクラスの中でマップを使用したり、
> マップを関数の引数として受け取りたいというものです。

では呼び出し側はC++/CLIなんですね?

じゃぱん 2008/07/05(土) 20:36:39
回答ありがとうございました。
>ちょいと気になるんだけど、お客さんはmanagedがいかなるものか、
よくよく承知の上でそんな要求を出してきてるんですよね?
これはちょっと微妙かも・・・
VS2005なのにクラスの宣言に__gc使おうとしてたり、String*とか定義しようとしてたり
と2005でのマネージは知らないかも・・・
ただ今までもマネージは使用したことあるみたいなので基本的には問題ないと思ってま
す。

また問題のほうは
>unmanagedのポインタならもてますよ。
これでだいぶ解決できました。

ただまだ解決できない箇所がありました。
構造体型の配列が定義できないのですが、何かいい方法ないでしょうか?

よろしくお願いします。

επιστημη [HomePage] 2008/07/05(土) 22:32:07
> 構造体型の配列が定義できないのですが

そのコードを見せてください。

じゃぱん 2008/07/06(日) 01:12:24
struct{
 int aaa;
 double bbb;
}Sxxx;

array<Sxxx> table = gcnew array<Sxxx>(256);

といった感じなんですがこの定義方法自体がまちがっているのでしょうか?
よろしくお願いします。

επιστημη [HomePage] 2008/07/06(日) 01:39:37
value class Sxxx {
 int aaa;
 double bbb;
};

int main() {
  array<Sxxx>^ table = gcnew array<Sxxx>(256);
}

...不安だなぁ。

余計な御世話でしょうけど、それほどあやふやなスキルのままで
お客様からお代を頂戴するに足る仕事ができるんやろか。

じゃぱん 2008/07/06(日) 20:22:01
[[解決]]
ありがとうございます。
これでなんとかやっていけそうです。

>余計な御世話でしょうけど、それほどあやふやなスキルのままで
>お客様からお代を頂戴するに足る仕事ができるんやろか。
これは自分でも重々承知しています。
ただ今回は開発が半分ぐらいしてからマネージでの開発を要求されたんですけど、
自分はそれまでマネージという言葉すらしらなかったほどでして。
本来は自分で勉強してから、質問も行うべきなんでしょうけど、あまりにも時間がなか
ったので初歩的な質問をしてしまいました。

なにはともあれ、今回は乗り切れそうです。
ありがとうございました。

古いスレッドには追加発言できません。