[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 17:12 / Filesize : 240 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.NET】 C++/CLI について語ろうぜ 【最適】



1 名前:デフォルトの名無しさん [2005/09/11(日) 23:54:01 ]
おそらく、.NET開発でデファクトスタンダードに最も近い
であろうC++/CLIについて語ろうぜ!

666 名前:デフォルトの名無しさん [2006/02/22(水) 16:05:53 ]
MSがC++/CLIを捨てるのは何年後くらいですか?

667 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 16:13:12 ]
MFCの如くこの劣悪貧を10年使うかも。
C++ってだけでもSTLやBoostが混ざってくると複雑なのに、正直CLIはカンベンて感じだおね。

668 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 17:22:04 ]
>>667
駄菓子菓子、これがないとネイティブとかからCLRが非常に使いにくい。
ほら、次でWPFとかなんかたくさんあるし。

669 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 23:36:01 ]
マイクロソフトがもうイラネと思ったら容赦なく捨てにくるさ。


670 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:00:23 ]
>>669

そりゃ日本だけ。海外ではVBerが反乱おこして、msも今では Love VB, Love C#だとよ。

671 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:53:32 ]
C#は、VC++とVBの中間を行くような言語だから、
どっちからも反発が強いだろうね。


672 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:03:54 ]
反発はしないけど、C++で出来るなら C++ Nativeでやっちゃうよ。
必要なとこだけ CLIで .Netなんてライブラリ感覚で使えばいい。

673 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 03:20:44 ]
/clrでNativeコンパイルすると遅くなる?



674 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 08:50:40 ]
>673
>348



675 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 09:37:51 ]
>>669
要るだろ。

だって、C++市場をCLIで混乱させることにより、
開発者をWin@ブビ or Win@C丼で留めておける。

676 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 10:00:24 ]
>>674

遅くなるのは事実としても、何で遅くなるんだろ?
異なるライブラリがリンクされるからか? lstrcmp自体の実装が異なるのか?

それとも呼び出し時にスタックチェックでも入ってるのかね…。


677 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 14:21:46 ]
>676
単純なループでは簡単に結論が出ない問題かもしれない
ちなみに漏れの環境では
CLR 6 - 7 sec.
Native 8 sec.
となった。意外だがCLRの方が早い
Win のほうは -02 -0t を付けた状態で、CLRの方はデフォルトのリリースモジュールだ

678 名前: mailto:sage [2006/02/23(木) 22:30:11 ]
>>670
そんな話しきいたことネ

679 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 22:47:11 ]
誰か、C++/CLI で吐いた実行ファイル、
mono で動かした奴いる??

以前 VS.NET 2003 の C# で書いたコンソールアプリなら
mono で動かしたことあるんだけど。

680 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 23:22:55 ]
mono がそもそも .net framework 2.0 に対応してたか?
してるなら、/clr:pure で動くだろう

681 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 08:17:28 ]
nullptr

682 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 11:48:08 ]
ガッ^

683 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 17:24:15 ]
>>678

blogs.msdn.com/hiroyask/archive/2006/02/13/530769.aspx

ケツの穴が広がるぐらい、ハードに読めや。


684 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 21:07:35 ]
>>683
良く読んだよ

>表の顔の日記 

> 裏の顔の日記
> さっさと消えてくんないかな。 うざいんだけど、 まじで。




685 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 04:29:20 ]
という電波でも飛んでるのか?


686 名前:648 [2006/02/25(土) 11:39:03 ]
また教えてください。

C++での構造体の以下の宣言
typedef struct tagHOGE{
  int x;
  long y[4];
}HOGE;

これをマネージ環境にしようとした場合
typedef struct tagHOGE{
  int x;
  long y[4]; ← ここが混合型らしい
}HOGE;

.\MainForm.cpp(26) : error C4368: 'y' をマネージ 'HOGE' のメンバとして定義できません。混合型はサポートされていません

というエラーが出ます。
単に4つのlong型の配列の定義がしたいのですが、マネージ環境では、どのようなやり方があるでしょうか?


687 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 11:43:26 ]
typedef struct → typedef value struct
では?

688 名前:648 [2006/02/25(土) 12:05:23 ]
>>687
そうです。コピペ間違いました。

value struct HOGE{
  int x;
  int y[4];
};

と記述してます。

689 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:17:18 ]
・・・value型使わず、ネイティブ型で定義すれば?

690 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:20:37 ]
あとは ref にして array<long>^ y で宣言して、コンストラクタで初期化するか

691 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:23:04 ]
value struct HOGE
{
  int x;
  array<long>^ y;
};
はコンパイルが通るが、仕様上これでいいのか?

692 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 12:38:17 ]
ok
ハンドルは nullptr で初期化される

693 名前:648 [2006/02/25(土) 12:58:50 ]
皆さん、早速のレス、ありがとうございます。

>>689

ネイティブで定義すればできることは確認してます。
ただそうすると少し複雑なソフトを組んだ場合、きちんとメモリの後処理をしないと
メモリリークが発生するので、マネージにすればメモリガベージの効用であまり複雑に
考えなくともよいかな、と思っているのです。

>>691

そのやり方もわかります。

各関数で、
void func1(void)
{
  HOGE wk1;
  wk2.y[2] = 123;
}

void func2(void)
{
  HOGE wk2;
  wk2.y[2] = 456;
}

というようなことをしたいのです。

2〜3日あがいてみて自分ではできなそうだったら、ネイティブで定義してやっていきます。
マネージ環境に慣れていけば、そのうち、何か気づきがあると信じて進むしかありません。


694 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:05:44 ]
2〜3日あがくなら2〜3日かけてマニュアル読んだほうがいいような気がする



695 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 13:45:46 ]
>>693
値型にGCを求める必要がある?

696 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 14:23:50 ]
C++/CLIのスレ見てると無意味にvalueを使いたがる人が多い気がするな。
valueは動作に癖があるから基本refで作ったほうがいいと思う。

697 名前:デフォルトの名無しさん [2006/02/25(土) 16:22:08 ]
value使ったほうが処理速度が速いとでも思い込んでいるんじゃ?
クセがあるには同意。


698 名前:648 [2006/02/25(土) 17:38:04 ]
いろいろとサイトをまわりまして、以下のようにしたところ動いているように見えます。
public ref struct HOGE {
  int x;
  array<long>^ y;
  HOGE() {
    y = gcnew array<long>(4);
  }
};

void func(void)
{
  HOGE^ abc = gcnew HOGE;
  abc->x = 10;
  abc->y[2] = 20;
  for(int i=0; i<4; i++){
    Debug::WriteLine(abc->y[i]);
  }
}

検討違いのコードでなければよいですが。

みなさん、いろいろとレスありがとう。


699 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 20:55:45 ]
>>698
これでも平気。
void func()
{
    HOGE abc;
    abc.x = 10;
    abc.y[2] = 20;
    for (int i = 0; i < 4; i++) {
        Debug::WriteLine(abc->y[i]);
    }
}

700 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 22:33:45 ]
C++は真のローカル変数を使える言語なんだから、(ユーザー定義オブジェクト
がスタック上に配置できる)GCが必要な場合ってのはそんなに多くはならない
ってビョーン先生が言ってた。

701 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:11:17 ]
>>700
それはわかるけれど、C++/CLIはCLIの世界にあわせないといけないからさ。

702 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:42:48 ]
C++/CLIは二つの言語が同居しているようなものだからな。
C++の拡張というより建て増し。

703 名前:デフォルトの名無しさん mailto:sage [2006/02/25(土) 23:49:05 ]
>699
それだと、配列のサイズが3で固定されちゃわない?

704 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 00:22:20 ]
>>702
二世帯住宅



705 名前:デフォルトの名無しさん [2006/02/26(日) 00:49:18 ]
ビョーン先生が取り扱っている案件はそうかもしれんけどな。
動的にオブジェクトが増えたり減ったりする案件のほうが多い。

706 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 00:56:47 ]
>>700
しかしビョーン先生はGCをそんなに否定していない。
既存のC/C++のコードと互換性を保ったまま導入できるのなら、
C++に入れてもいいというようなことをD&Eで書いている。

707 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 20:57:17 ]
>>705
vector使えばええやん。メンバかローカルにしておけばdeleteいらん。

708 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 21:08:56 ]
>>707
グローバルでもdeleteいらんぞ

709 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 21:14:38 ]
別に GC なんて C++/CLI の利点じゃないだろ
単に .net framework を既存の C++ と混同することなく使えるってとこが一番重要さ

C++/Smalltalk とか C++/Squeak とか出てこないかな

710 名前:デフォルトの名無しさん [2006/02/27(月) 01:56:21 ]
【初心者歓迎】C/C++室 Ver.25【環境依存OK】から誘導されてきました( `・ω・´)ノヨロシクー
VC8でopenFileDialogを使いたくて
MSDNのソースを試してみようと
ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.openfiledialog.aspx
説明を読み
フォームに Button を配置して
using namespace System;を宣言して、
下記のコードを試したのですがエラーが出ます、何か読み込んでいないファイルがあるか設定のミスだと思うのですが、原因が分かりませんよろしくお願いします。
private:
  voidbutton1_Click(Object^/*sender*/,System::EventArgs^/*e*/)
  {
    Stream^myStream;
    OpenFileDialog^openFileDialog1=gcnewOpenFileDialog;

    openFileDialog1->InitialDirectory="c:\\";
    openFileDialog1->Filter="txtfiles(*.txt)|*.txt|Allfiles(*.*)|*.*";
    openFileDialog1->FilterIndex=2;
    openFileDialog1->RestoreDirectory=true;

    if(openFileDialog1->ShowDialog()==::DialogResult::OK)
    {
      if((myStream=openFileDialog1->OpenFile())!=nullptr)
      {
        //Insertcodetoreadthestreamhere.
        myStream->Close();
      }
    }
  }
error C3083: 'DialogResult': '::' の左側のシンボルには、型を指定しなければなりません
error C2039: 'OK' : '`global namespace'' のメンバではありません。
error C2065: 'OK' : 定義されていない識別子です。


711 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 07:06:19 ]
>>710
System::Windows::Forms::DialogResult::OK とフルで書く。

712 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 07:26:28 ]
>>711
最後まで仕様が揺れた所かも知れないね。

713 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 10:47:00 ]
この状況って System::Windows::Forms まで using で指定しているから、単純にグローバル
スコープ指定していることが問題なんじゃね?
12行目の ::DialogResult を意味なく、:: で始めるな、と

714 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 11:06:47 ]
>>713
ところがどっこい
DialogResult::OK と書くと今度は
System::Windows::Forms::Form::DialogResultが無いというエラーになる。
using namespace は探しに行ってくれないらしい。



715 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 11:38:26 ]
ん、サンプルだと :: で始めてるな
っていうか、>710 って名前空間 System しか宣言してないって言ってるが
using namespace System::Windows::Forms が宣言されている環境では
::DialogResult::OK でエラーなくコンパイルできるな

先頭 :: の名前検索ルールって、グローバル指定じゃないんだ・・・

716 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 13:38:23 ]
>>714
using namespace System::Windows::Forms;
してあるということ? その"Form"は何よ?

>>715
namespace N { int x; };
using namespace N;
int x;
int f(void) { return x; } ←このxはambiguousになる。それで正しい。


717 名前:715 mailto:sage [2006/02/27(月) 13:45:08 ]
まず、 >710 の問題は、単に System::Windows::Forms が using 指定していないから
using namespace System::Windows::Form;
を付ければおっけー

>716
::DialogResult ってなっているから、先頭に :: を付ける場合ってグローバル名前空間の
名前空間指定だと思ってた。カレント解決してくれるんだ


718 名前:716 mailto:sage [2006/02/27(月) 13:55:54 ]
>>717
いや、「正しい」はグローバル参照の方。

> using namespace System::Windows::Form;
> を付ければおっけー

Forms

719 名前:715 mailto:sage [2006/02/27(月) 18:46:14 ]
ということは、MSの実装はバグかMS独自仕様か、微妙なとこだな

720 名前:710 [2006/02/27(月) 19:46:54 ]
皆さんどうもありがとう、遅くなってすみません
今帰宅しました

ヘッダー部分ですが
#pragma once
#include <fstream>
#include <vcclr.h>
#include <stdlib.h>

namespace hoge {

using namespace System;
using namespace System::IO;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace std;
と宣言しているのですが
皆さんの、ご指導通りやってみましたが、

error C3083: 'DialogResult': '::' の左側のシンボルには、型を指定しなければなりません
error C2039: 'OK' : '`global namespace'' のメンバではありません。
error C2065: 'OK' : 定義されていない識別子です。
.\hoge(8) : error C2337: 'STAThreadAttribute' : 属性が見つかりません。
とこんな感じで、
ワケ 川・∀・川 ワカメです

721 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:17:53 ]
>>720
その一
using namespace ...
using namespace ...
namespace hoge {
と順番を変えたら ::DialogResult::OK でコンパイルが通る。

その二
hoge::DialogResult::OK  でコンパイルが通る。
恐らく下のも通るはず。
[hoge::STAThreadAttribute]

その三
namespace hoge { を使わずすべてGlobalに書く

これが仕様なのかバグなのかは俺にもわかんね〜

722 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:17:53 ]
気になって少々試してみたが、関数内でusingすればDialogResult::OKと書いてもエラーにならなかった。
void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
    using ::System::Windows::Forms::DialogResult;

    OpenFileDialog ofd;
    ofd.InitialDirectory = "c:\\";
    ofd.Filter = "txtfiles(*.txt)|*.txt|Allfiles(*.*)|*.*";
    ofd.FilterIndex = 2;
    ofd.RestoreDirectory = true;

    if (ofd.ShowDialog() == DialogResult::OK)

723 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:39:09 ]
ほとんど素のC++の話題になってるけど、まあいいか。
なんでDialogResultが重なってんだろ?

using ::System::Windows::Forms::DialogResult;
if (ofd.ShowDialog() == OK)

using ::System::Windows::Forms;
if (ofd.ShowDialog() == DialogResult::OK)
ならわかるけど。


724 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 20:45:59 ]
>>723
C++/CLIの列挙子は列挙型の中のスコープにある。



725 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 23:10:50 ]
>>721
*.h でこれをやると using が include 先に伝播してしまうので思わぬ名前の重複が起きてしまう。
>using namespace ... 
>using namespace ... 
>namespace hoge { 

妥協案としては、メンバー関数の実態を *.c に分離してから::DialogResult::OKと指定する。
using namespace hoge;
namespace hoge {
   void hoge::button1_Click(System::Object^ sender, System::EventArgs^ e) 

    if (ofd.ShowDialog() == ::DialogResult::OK) 


726 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 00:29:25 ]
ISO C++だとusingディレクティブは名前を可視にするだけで、
usingディレクティブが書かれた名前空間へ名前を持ってくるものではなかったはず。

namespace foo {int x;}
namespace bar {int y;}

using namespace foo;
using bar::y;

::x = 10; //NG. x = 0;或いはfoo::x = 0;としなければならない。
::y = 20; //OK. もちろんy = 0;或いはfoo::y = 0;も問題ない。

727 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 00:59:11 ]
namespace N { namespace M { enum E { zero = 0 }; }; };
using namespace N;
int f(void) { return M::zero; }
あるいは、
namespace N { namespace M { enum E { zero = 0 }; }; };
using namespace N::M;
int f(void) { return zero; }
なんじゃないのか?
// Eのenum名指定なしでanonymous enumにしても同じ。

728 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 01:38:12 ]
>>727
CLRタイプのenum class と Cタイプのenumの2種類あって、
後者の話ならそのとおり。

729 名前:710 mailto:sage [2006/02/28(火) 21:38:39 ]
皆さんのおかげで、openFileDialogを動かす事ができたのですが
肝心な事を忘れていました、ファイルを選択してボタンを押しても
実際にファイルが開かないんですよね(;^ω^)
// Insert code to read the stream here.
ってコメントアウトしてある部分が気になるけど、ここに何か
書かないといけないのかな?


730 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 21:43:05 ]
教えてクンマンセー!

731 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 21:53:32 ]
コメントが何のために有るのかわかってるのか?
っていうか読めよ。

732 名前:710 mailto:sage [2006/02/28(火) 21:54:54 ]
>>731
英語読めません(´・ω・`)

733 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 21:57:00 ]
>>732
んじゃ、英語の勉強から。英語書けないならともかく、読めないんじゃ
プログラミングなんてやってられない。

734 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 22:35:55 ]
翻訳サイトも使えないようなヤツはプログラミングやめれ



735 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 22:40:27 ]
ていうか、732は710の偽なんですが

736 名前:732 mailto:sage [2006/03/01(水) 00:45:52 ]
俺は嘘つきだから俺の言うことは嘘ばっかりさ。さてこの嘘はホントかわかるかねwww

737 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 01:08:24 ]
そんなおもしろくないよ?

738 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 01:32:16 ]
>>733
ひまわりが専門なので関係ないでしょ

739 名前:710 mailto:sage [2006/03/01(水) 02:21:51 ]
゚・*:.。..。.:*・゜ヽ( ´∀`)人(´∀` )ノ・゜゚・*:.。..。.:*
できたYO!
英語のサイトで(・∀・)イイ!!ヒント見つけて
多少漏れのセンスでアレンジしましたがなにか
つーかさー"StreamReader c++ textBox"で具具っても
C#のサンプルや話題が多くて、参考にならなかったんで
英語でぐぐったら
キタキタキタキタ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!
やっぱり本場はいいサンプルが多いな、でもそのものズバリはなかったが
{
// Insert code to read the stream here.
System::IO::StreamReader ^ sr = gcnew
System::IO::StreamReader(openFileDialog1->FileName);
String ^temp = sr->ReadToEnd();
textBox2->Text=temp;

//MessageBox::Show(sr->ReadToEnd());
sr->Close();
myStream->Close();
}

740 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 02:32:10 ]
C++/CLI の場合でも .NET Framework のサンプルがほしければ
C#やVBのをそのまま使えるってのに

741 名前:710 mailto:sage [2006/03/01(水) 02:37:58 ]
|∀・).。oO(・・・)
そうなのか?


742 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 02:38:23 ]
ガンガレ

743 名前:710 mailto:sage [2006/03/01(水) 02:43:27 ]
ムリッポ

744 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 07:19:26 ]
>>740 うむ。
ちょっと間接参照の記述が違うくらいで、
流れは C# のコードのままでいいな。
まぁそれが C++/CLI の真骨頂でもある。



745 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 14:15:46 ]
>>739
C++/CLIなんだからいちいちgcnewする必要はないと思う。

746 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 14:50:01 ]
>>739
つかCloseもfinally句に書いてないし。
C#ならusing、C++/CLIならスタックオブジェクトにしろよなほんと。

747 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 16:30:41 ]
で、STLはどうしてるんだ、おまえら?


748 名前:デフォルトの名無しさん [2006/03/01(水) 16:49:26 ]
C++/CLI でGUIなアプリつくるべ、と、フォームをデザインして
遊んでます。で、みなさん、アプリで必要となる大量の
変数たちは、class Form1 のメンバとしてずらずら宣言してしまって
構わないんでしょうか?

今までは UNIX 系でのコンソールアプリ主体で、自前の
アプリケーションクラスを用意して main() の中から
そいつをインスタンス化して、という感じでやってました。

Windows でのグラフィカルなアプリでの作法では、
自動生成された class Form1 にどんどんメンバを
追加しちゃっていいんですか?

当然イベントハンドラなどはデザイナで追加されていくわけで、
手動で追加したメンバのためにフォームデザイナが混乱して
しまわないかすごく不安です。

749 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 16:54:58 ]
STLが無い、C++なんて。

クソ。

750 名前:デフォルトの名無しさん [2006/03/01(水) 16:57:44 ]
>>749 え?C++/CLI で STL つかえないの?

751 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 17:06:05 ]
>>750
ネイティブ型に対しては使える。

そしてマネージ型対応のSTL/CLI(旧称STL.Net)がVC++ 2005と同時に公開されるはずだったのだが、
伸びに伸びて未だ公開されていない。

www.microsoft.com/japan/msdn/vs05/visualc/stl-netprimer.asp

いっそのこと俺たちで作るかw。

752 名前:デフォルトの名無しさん [2006/03/01(水) 17:18:06 ]
>>751 あ〜びっくりした。
そうだよな、ネイティブ型に対しては使えるよな?

C++ で書きためてきた std::vector 使ってる
数値計算用のライブラリがあって、どうしても
それから逃れられない + DirectX で可視化したい、
という要求があって、それ満たすには C++/CLI しか
ないだろ、ってことでこれから使おうと思ってたんで、
ちょっと焦った。

753 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 18:24:32 ]
>>752
いやいやいや、お前DirectXをなんと心得る?

754 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:09:05 ]
>>753 まだ、OpenGL のかわりみたいなもん、
くらいの認識です。頂点データの扱いとか
ぜんぜんちがうんですかね?
その話題はスレ違いですが。

目的は動き回る多数の分子模型の
ようなものなんですが。



755 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:16:26 ]
DirectXはまだネイティブがメインなのにどうしてSTLの無いC++/CLIを無理に使おうとするのか

756 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:28:40 ]
com::ptr 型がそこにあるから

757 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:29:40 ]
OpenGLでもいいし。

758 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 19:40:32 ]
>>755 いや、それすらまだ知らないんですよ。
普通に次元の可視化するときに、
フォームにぺたぺたとやってえらく簡単に
できたもんで、この勢いで 3D もいける?
とか思ったわけです。

>>757 いわれていれば、そうかも

759 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 20:01:27 ]
>>758
そのノリでやりたいんなら(ビジネスっていうかグラフ化とかな)、
確かにマネージのAvalonが向いてる。けどもまだない。残念。

DirectXとOpenGLは例えばDirectXはCOMだったりとか細かくは違う。
けど理論はあんまり違わんので好きなほうでどうぞ。
一般的には凝ったことしなければOpenGLのほうが簡単。

760 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 20:11:40 ]
スレ違いなんだが、VTKとかいろいろあるじゃん?

> フォームにぺたぺたとやってえらく簡単に
> できたもんで、この勢いで 3D もいける?

そんな子どもっぽい理由じゃなくて、(発端じゃなくて直線的な選択の事ね)
道具くらいちゃんと自分で選べるようになろうよ。
sal.linet.gr.jp/E/1/index.shtml でも漁れ。多くがWindowsもOK。
OpenGLやDirectXを直接叩くなんて馬鹿らしいよ。

761 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 20:27:15 ]
>>760 THX

論文に貼る図だと、動画じゃないので普通に
gnuplot で作ってるんですが、プレゼンだと
やっぱ動かなきゃな、ってことで取り組んでます。
色々あるんですね、こりゃ楽しそうだ。

762 名前:710 mailto:sage [2006/03/01(水) 21:11:31 ]
今晩も盛り下がっていますね皆さん( ノ゚Д゚)こんばんわ
>>744間接参照の仕方を巧く解説してるサイトってない?
>>745newでは困憊羅君が、言うこと聞いてくれませんでした
>>746スタックオブジェクトって、なに?グラフや絵を描くメソッドのことかな?と聞いてみる
夕べ
ttp://www.athomejp.com/goldfish/vcs/openfiledialogreader.asp
ここのソースをC++に書き換えたらどんな風になるのかな?
C#の.の使い方がポイントだと思うが、もう少し理解できない
多分>>744の言っていた、間接参照の仕方の事だと思うのだが
C++の場合漏れは、::が出てきたら
何々の何々と読んでいるのだが、C#の.の読み方(解釈)教えてください

 //ファイルを指定させる
 DialogResultresult=openFileDialog1.ShowDialog();
 if(result==DialogResult.OK)
 {
    //指定されたファイルを読み取る
    System.IO.Streamstream=openFileDialog1.OpenFile();
    System.IO.StreamReaderstreamR=
      newSystem.IO.StreamReader(stream,
        System.Text.Encoding.Default);
    stringstr=streamR.ReadLine();
    //ファイルを読み取り
    while(str!=null)
    {
      //デバッグ出力
      Debug.WriteLine(str);
      str=streamR.ReadLine();
    }
    //StreamReaderをクローズ
    streamR.Close();
 }

763 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 21:42:20 ]
>>762
C#の . はC++(/CLI)だと、 . -> ::のどれか。
. 値(ポインタ・ハンドルでないもの)と参照(ネイティブのT&とマネージドのT%)
-> ポインタ・ハンドル
:: 静的メンバやその他(クラス内で親クラスを参照するときなど)

なるべく同じようにC++/CLIへ写すとこうなる。
//ファイルを指定させる
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult::OK)
{
    // 指定されたファイルを読み取る
    System::IO::Stream^ stream = openFileDialog1.OpenFile(); 
    System::IO::StreamReader^ streamR =
        gcnew System::IO::StreamReader(stream, System::Text::Encoding::Default);
    System::String^ str = streamR->ReadLine();
    // ファイルを読み取り
    while (str != nullptr)
    {
        // デバッグ出力
        Debug.WriteLine(str);
        str = streamR->ReadLine();
    }
    streamR->Close();
}
(続く)


764 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 21:43:14 ]
これをスローカル変数を使うようにして、
個人的にReadLineが2度もソース上に現れるのが気になったのでそれを修正したもの。
//ファイルを指定させる
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult::OK)
{
    // 指定されたファイルを読み取る
    System::IO::Stream^ stream = openFileDialog1.OpenFile(); 
    System::IO::StreamReader streamR(stream, System::Text::Encoding::Default);
    System::String^ str;
    // ファイルを読み取り
    do
    {
        str = streamR.ReadLine();
        // デバッグ出力
        Debug.WriteLine(str);
    }
    while (str != nullptr);
}



765 名前:デフォルトの名無しさん [2006/03/01(水) 21:48:12 ]
>>764
Debug.WriteLine に nullptr 渡すのってありだっけ。
}

766 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 22:15:08 ]
>>765
どうみてもまずいですね。
本当にありがとうございました。

そう書こうと思ったけど、その前に試してみた。
System::Diagnostics::Debug::WriteLine(static_cast<String^>(nullptr));
全く問題なかった。

ついでに言うとそれ::にするの忘れてた。すまん。
結局こうすればよかったな。
while (System::String^ str = streamR->ReadLine())
{
    // デバッグ出力
    System::Diagnostics::Debug::WriteLine(str);
}







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<240KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef