マネージでアンマネージを使用 – プログラミング – Home

マネージでアンマネージを使用
 
通知
すべてクリア

[解決済] マネージでアンマネージを使用


じゃぱん
 じゃぱん
(@じゃぱん)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

始めまして、VC++である問題の解決方法を調べていたらここにたどり着きました。
初心者なので基本的な質問をしてしまうかもしれませんがよろしくおねがいします。

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

開発環境はWindowsXPのVS2005です。

よろしくお願いします。


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

managedオブジェクトはmap(およびあらゆるSTLコンテナ)の要素にはなれません。
VS2008(VC++9)に乗り換えられるなら、STL/CLRが使えますが。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

VS2005ならSystem::Collections::Generic::SortedDictionary<K,T>にportするか。


返信引用
じゃぱん
 じゃぱん
(@じゃぱん)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

回答ありがとうございます。
ただ解決はできませんでした。

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

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

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; }
};


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

>(マネージを使用するのもマップを使用するのも客先から指定されています。)

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

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

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


返信引用
じゃぱん
 じゃぱん
(@じゃぱん)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

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

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

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

よろしくお願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 構造体型の配列が定義できないのですが

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


返信引用
じゃぱん
 じゃぱん
(@じゃぱん)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

struct{
int aaa;
double bbb;
}Sxxx;

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

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

value class Sxxx {
int aaa;
double bbb;
};

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

...不安だなぁ。

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


返信引用
じゃぱん
 じゃぱん
(@じゃぱん)
ゲスト
結合: 21年前
投稿: 11
Topic starter  

ありがとうございます。
これでなんとかやっていけそうです。

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました