C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・


(過去ログ 79 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■46540 / inTopicNo.1)  C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
  
□投稿者/ H96 (1回)-(2010/02/04(Thu) 23:19:03)

分類:[C++/CLI] 

C#からC++を使おうと奮闘しているんですが上手くいきません.

そもそも,C++で書いていたプログラムをスタティックライブラリとして吐き出して(process.lib)
このLibで定義されたメソッドをC++/CLIで記述したWrapper.cppで呼び出して,
Wrapper.cppから作成したDLLをC#で呼び出しています.
C#には参照設定でDLLを追加しました.

なのですが,意図した結果が得られず困っております.


そもそもC++で書かれているのは
テキストファイルから読み込んだ数値をクラスのメンバに代入するといったものです.
ただ,このクラスが少し複雑で

Class MyClassA{

private:
struct MyStructA{

double rateA;
};

public:
struct MyStructB{

double rateB;
};

public:

MyStructA MyVarA;//ここだけは意図した結果が得られます

vector< vector<MyStructB> > MyVarB;//こっちは意図した結果が得られません・・・・

///////////////////////////////////////
//メソッド
//////////////////////////////////////
/*
テキストファイルから読み込んだ数値を
MyVarAとMyVarBに格納
*/
bool MyProcessA(string path);//C#で呼び出したいメソッド


};

のような構造になっています.

欲しい結果は
1度メソッドMyProcessAの実行してMyClassAのインスタンスのMyVarAとMyVarB格納されている
値をC#に持っていくといったものです.
もちろん,C++のみ実行した場合はMyProcessAは正常に機能して意図した結果得られます.

なのですが,C#から以下のようなラッパーをかますと
デバックで値を確認したところ
MyVarA.rateAには正常な値が格納されるのですが,
MyVarB.rateBには{・・・・・}と表示されるだけで
意図した結果が得られません

MyClassA* myClassA = new myClassA();

myClassA->MyProcessA("適当なパス");



ここ数日,悩み続けているのですが解決しません.
何か分かる方がおりましたら,ご助力をお願いできないでしょうか?
宜しくお願いします.
何か,足りない情報がありましたら指摘をお願いします.




引用返信 編集キー/
■46547 / inTopicNo.2)  Re[1]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ Jitta on the way (546回)-(2010/02/05(Fri) 07:02:16)
No46540 (H96 さん) に返信

vector という、名前は同じだが、実装は違うものを使っているから。

C++/CLI が、.NET Framework で定義されたものに入れ直す必要があります。
引用返信 編集キー/
■46567 / inTopicNo.3)  Re[2]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ H96 (2回)-(2010/02/05(Fri) 18:15:07)
お返事ありがとうございます.


> ■No46540 (H96 さん) に返信
>
> vector という、名前は同じだが、実装は違うものを使っているから。
>
> C++/CLI が、.NET Framework で定義されたものに入れ直す必要があります。

ということは,C++のソースに記述されたメソッドの処理で,同じくC++のソースに記述されたクラスのインスタンスに格納されている情報をC++/CLIから得ようとするときに型変換にのようなことをしなければならないということですか??
引用返信 編集キー/
■46579 / inTopicNo.4)  Re[3]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ 中博俊 (1349回)-(2010/02/05(Fri) 21:14:13)
>>C++/CLI が、.NET Framework で定義されたものに入れ直す必要があります。
> ということは,C++のソースに記述されたメソッドの処理で,同じくC++のソースに記述されたクラスのインスタンスに格納されている情報をC++/CLIから得ようとするときに型変換にのようなことをしなければならないということですか??

そういう感じです。
そうではない場合にはIntPtrで.NET側で受け取ってやったりする必要があります。
というかそういうあっち側と、こっち側を橋渡しする専用(に近い)言語ですね。C++/CLIは
引用返信 編集キー/
■46582 / inTopicNo.5)  Re[4]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ H96 (4回)-(2010/02/05(Fri) 21:45:53)
中博俊 さん.
回答ありがとうございます!!

No46579 (中博俊 さん) に返信
> >>C++/CLI が、.NET Framework で定義されたものに入れ直す必要があります。
>>ということは,C++のソースに記述されたメソッドの処理で,同じくC++のソースに記述されたクラスのインスタンスに格納されている情報をC++/CLIから得ようとするときに型変換にのようなことをしなければならないということですか??
>
> そういう感じです。
> そうではない場合にはIntPtrで.NET側で受け取ってやったりする必要があります。
> というかそういうあっち側と、こっち側を橋渡しする専用(に近い)言語ですね。C++/CLIは

はぁ〜・・・・そうなのですね.

たとえば,

Class SampleCLassA{

public:
Vector<Vector<double>> VV_A;


};

というクラスをC++で定義した場合,
C++/CLI側で SampleCLassAのインスタンスのメンバVV_Aに格納されている値を設定もしくは取得するためにはどうしたらいいのでしょうか??
教えていただけないでしょうか??



引用返信 編集キー/
■46589 / inTopicNo.6)  Re[5]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ 中博俊 (1351回)-(2010/02/05(Fri) 22:50:38)
public: double getValue(int a, int b){ return VV_A[a][b];};

doubleならSystem::Double, intならSystem::Int32と互換性がある

もうすこしC++/CLIについて勉強されるといいかも。
拙著でよければどうぞ・・・
http://bit.ly/anYTz8
引用返信 編集キー/
■46591 / inTopicNo.7)  Re[6]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ H96 (6回)-(2010/02/05(Fri) 23:26:08)
No46589 (中博俊 さん) に返信
> public: double getValue(int a, int b){ return VV_A[a][b];};
>
> doubleならSystem::Double, intならSystem::Int32と互換性がある
>
> もうすこしC++/CLIについて勉強されるといいかも。
> 拙著でよければどうぞ・・・
> http://bit.ly/anYTz8

ありがとうございます!!
今,取り組んでいることで,どうしてもC++/CLIを使う必要があって,
ネットなので情報を探していたのですが,中々,情報が見つからず,
昨日は本屋にまで行ったのですが,関連書籍が一冊も見つからず,ほんとに困っていました・・・・・.

買って勉強しようと思います.
もし,何か他にも参考になる書籍やサイトがあれば教えていただけないでしょうか?



引用返信 編集キー/
■46592 / inTopicNo.8)  Re[7]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ 中博俊 (1352回)-(2010/02/05(Fri) 23:29:19)
http://msdn.microsoft.com/ja-jp/library/68td296t(VS.80).aspx

くらいしかないかな。

引用返信 編集キー/
■46593 / inTopicNo.9)  Re[8]: C#とC++をCLIで繋ぐときにDLLが正常に動作しない・・
□投稿者/ H96 (7回)-(2010/02/05(Fri) 23:37:50)
ありがとうございました!!
本と合わせて参考にさせていただきます!!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -