5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

managed C++ やろうぜ!!

1 :デフォルトの名無しさん:02/02/24 02:47
C#関連のスレは山ほどあるが
managedC++のスレが無いじゃないか。
折角.NETに生き残ったC++、みんなで語ろうぜ。

393 :デフォルトの名無しさん:03/05/27 00:55
そりゃMC++とは関係ねえっしょ

394 :デフォルトの名無しさん:03/05/27 01:05
MC++はポインタ使えるの?それじゃー意味ないっしょっていうつっこみは無しで。

395 :デフォルトの名無しさん:03/05/27 01:08
恐ろしいことに、使える。

396 :394:03/05/27 01:13
>>395
回答ありがとう。
どうmanageするんだろうね。

397 :デフォルトの名無しさん:03/05/27 01:17
>>396
見てみたほうが早い

398 :394:03/05/27 01:22
>>397
そうだね。イメージ的には荒馬慣らしって感じがする>まったくの想像。

399 :デフォルトの名無しさん:03/05/27 01:24
JITが基本なのでスタックもヒープもそのままということ
インタプリタやJavaのようなものとは全く別物だよ

400 :デフォルトの名無しさん:03/05/27 01:28
>>399
ヒープは別。

401 :デフォルトの名無しさん:03/05/27 01:28
自分の中では「MC++はC#をC++風に味付けしたもので〜」という記事を
どこかで読んで以来、まったく興味を無くした経緯がある。

402 :デフォルトの名無しさん:03/05/27 01:31
>>400
GCに任せるかどうかは選択できるわけじゃん。

403 :デフォルトの名無しさん:03/05/27 01:46
>>401
「C#はMC++をJava風に味付け」の間違いではなくて?

404 :デフォルトの名無しさん:03/05/27 01:53
>>403
いや、「まずC#が先にあって〜」みたいな切り口だった。

405 :山崎渉:03/05/28 12:42
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

406 :デフォルトの名無しさん:03/05/30 19:03
沈みすぎage

>>404
まず.NETがあって、じゃないかなあ


407 :デフォルトの名無しさん:03/06/01 20:14
小さな DLL だったら、
C# でラッパクラス作るよりも、
Managed C++ で書き直しちゃう方が早かった。
てか C# の DllImport うんちゃらがよう分からんですタイ。

Managed C++、思ったより使えそうな感触。

408 :デフォルトの名無しさん:03/06/01 20:28
>>407
そのための MC++ です
日本語の参考書籍・・・無いよなあ・・・

409 :デフォルトの名無しさん:03/06/02 01:21
無いっすねえ..

6800円かそこらの分厚い本で
VC++.NET 解説みたいなのんが有ったんで
チラっと眺めてみたんですが、
Manged C++ に関する記述は 20 ページかそこらだけ。
この厚さで... と涙せずにはいられませんでした。

つーか .NET と無関係な VC++ な記述が殆どを占めてて泣けた。
チラっと見ただけなんで間違ってるかも知れないけど。

410 :洗濯猫:03/06/02 15:20
初心者ですが、
MFCで作ったコードをマネージドに変換して
コンパイルして、
CRLで動くようにできますか?

またドキュメントビューアーキテクチャを
マネージドシープラで実現することは可能ですか?

411 :デフォルトの名無しさん:03/06/02 15:25
★クリックで救えるオマ○コがあるらしい★
http://yahooo.s2.x-beat.com/linkvp/linkvp.html

412 :デフォルトの名無しさん:03/06/02 15:37
>>410
間にラッパークラスを挟めば可能

413 :デフォルトの名無しさん:03/06/03 01:11
MFC 使ったやつとかよりも
API じか叩きしたようなのほど効果有るっぽい。

ところで参照渡しすれば C# で ref する扱いになるみたいだけど
out する扱いは無理ぽ?
ref だけで用事足りるからどうでも良いっちゃ良いのだけど
なんか無駄に気になったので。

414 :デフォルトの名無しさん:03/06/07 18:13
void WndProc(Message *m)
{
  if (m->Msg == WM_NOTIFY)
  {
    LPNMHDR nmhdr = (LPNMHDR)m->LParam;
  }
}

Managed C++でこういう感じにキャストしたい場合は、どういう方法でやればいいんでしょうか?
dynamic_castなどでもだめでした。。

415 :414:03/06/07 20:01
(LPNMHDR)m->LParam.ToPointer();
で出来ました。。

416 :デフォルトの名無しさん:03/06/07 20:57
ほう。なるほど。

417 :デフォルトの名無しさん:03/06/20 18:29
.NET C++ でWindowsフォームアプリケーションでウィンドウメッセージを捕まえるにはどうすればいいでしょう?
解像度変更を検出したいんだけど・・・。

418 :417:03/06/20 18:50
[System::Security::Permissions::PermissionSet(System::Security::Permissions::SecurityAction::Demand, Name="FullTrust")]
void WndProc(Message* m) {
// ...
}
ヘルプにはFormでWndProcをオーバーライドすると書いてあるんですが、
オーバーライドすると' マネージ型で、仮想メソッドへのアクセシビリティを少なくすることはできません。」
とエラー吐かれます。
そもそも1行目の [System::Security... は何を意味するかと子一時間...

419 :デフォルトの名無しさん:03/06/20 18:59
何で参照渡しをポインタにしているのか小一時間...

420 :417:03/06/20 19:35
protected:
 void WndProc(Message* m) {
  // ...
 }
これだけでいけますた。
さっきのエラーはprotectedで宣言された仮想関数をprivateには出来ねーぞって事でした。

421 :デフォルトの名無しさん:03/07/06 23:38
保守

422 :デフォルトの名無しさん:03/07/15 03:32
>>388
ほんとだ使えるようになってる。

MC++で
インデクサとforeachは使えないのでしょうか?
(演算子がC++の時のようにオーバーロードできないような...)


423 :デフォルトの名無しさん:03/07/15 05:35
サンプル作ってみた

#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
using namespace System::Collections;

#define mprint(x) System::Console::WriteLine( x );

namespace DesignPattern
{
__gc public class Book
{
private:
System::String *name;
public:
Book(){this->name = System::String::Empty;}
Book(System::String *n){this->name = n;}
__property System::String* get_Name(){return name;}
__property void set_Name(System::String *n){this->name = n;}
};

424 :422(続き):03/07/15 05:45
__gc public class BookShelf :public System::Collections::ArrayList,
public System::Collections::IEnumerator
{
private:
int mIndex;
public:
BookShelf(int maxsize) :mIndex(-1){}
__property int get_Length(){return __super::Count;}
void append(Book *b){this->Add(b);}
//インデクサが使えないので
Book* at(int index){return static_cast<Book*>( this->get_Item(index) );}
System::Collections::IEnumerator* GetEnumerator(){return this;}
__property System::Object* get_Current(){return at(mIndex);}
bool MoveNext(){
if(mIndex <(this->Length-1)){mIndex++;return true;}
else{return false;}
}
void Reset(){mIndex=-1;}
};
}

using namespace DesignPattern;

425 :422(続き):03/07/15 05:48
int _tmain(){
BookShelf *bookshelf = new BookShelf(3);
bookshelf->append(new Book(S"Book1"));bookshelf->append(new Book(S"Book2"));
bookshelf->append(new Book(S"Book3"));bookshelf->append(new Book(S"Book4"));
/*これをやりたいんだが...
foreach(Book book in bookshelf)
Console.WriteLine(book.Name);*/
//ちょっとだるいね
for(int i=0;i<bookshelf->Length;i++){System::Console::WriteLine( bookshelf->at(i)->Name );}
//だるいよだるすぎるよ
{IEnumerator *i = bookshelf->GetEnumerator();
i->Reset();
while(i->MoveNext()){
Book *book = static_cast<Book*>( i->Current );
mprint(book->Name);
};}
//ということで foreachをマクロでやってみる
#define mforeach(type____,identifier____,expression____) \
{ IEnumerator *i____ = expression____->GetEnumerator(); \
i____->Reset(); \
while(i____->MoveNext()){ \
type____ *identifier____= static_cast<type____*>( i____->Current );
#define mforeach_end \
}; \
}
//イイ
mforeach(Book,book,bookshelf)
mprint(book->Name);
mforeach_end
return 0;}


426 :デフォルトの名無しさん:03/07/15 08:38
Quake II .NET
http://www.vertigosoftware.com/Quake2.htm

カコ(・∀・)イイ!

427 :デフォルトの名無しさん:03/07/16 00:30
managed Age++

428 :デフォルトの名無しさん:03/07/18 23:54
マネージドなクラスをSTLのコンテナに入れることは、できないみたいだな。


429 :デフォルトの名無しさん:03/07/19 00:19
COBOLだけはガチ!

430 :428:03/07/20 12:09
gcrootを使ってできた。

431 :デフォルトの名無しさん:03/07/20 15:12
>>430
へー。
こんな感じでやってみたけどOKだった。
std::vector<gcroot<String*> > v;
for(System::Int32 i=0;i<100;i++){
v.push_back(String::Concat( S"test",i.ToString() ) );
}
Console::WriteLine( v[23]->ToString() );


432 :デフォルトの名無しさん:03/07/20 15:32
>>431
http://pc2.2ch.net/test/read.cgi/tech/1058618416/

433 :デフォルトの名無しさん:03/07/20 17:56
>へー。
>こんな感じでやってみたけどOKだった。
読んだ瞬間ダメだったのかと思って焦った。

ところでこのToString()はいらないよ。
>Console::WriteLine( v[23]->ToString() );

434 :デフォルトの名無しさん:03/07/25 19:17
>425
static_castでいいのかな?
dynamic_castで型のチェックした方がいいと思うんだが。

435 :425:03/07/25 21:19
>>434
ほんとですね。
動的にチェックするように変更しました。
(キャスト失敗時に System::InvalidCastException がスローされます)

#define mforeach(type____,identifier____,expression____) \
{ System::Collections::IEnumerator *i____ = expression____->GetEnumerator(); \
i____->Reset(); \
while(i____->MoveNext()){ \
type____ *identifier____= __try_cast<type____*>( i____->Current );

436 :デフォルトの名無しさん:03/07/27 01:17
http://homepage2.nifty.com/MXC03711/mc/managedcpp.htm

437 :山崎 渉:03/08/02 02:17
(^^)

438 :デフォルトの名無しさん:03/08/12 09:33
MSDNのXmlSerializerにあるサンプルをMC++で試しているのですが、
__gc struct Address{
[XmlAttribute] String *Name;
};
の[XmlAttribute]のアトリビュートだけがなぜか見つからないと出ます。
解決策はないのでしょうか?

(他の属性はSystem.Xml.dllを参照の追加してOKでした)↓
[XmlElementAttribute][XmlArrayAttribute][XmlRootAttribute]



439 :デフォルトの名無しさん:03/08/12 09:51
そりゃXmlAttributeAttributeじゃな。たしかに紛らわしいけど。
最初のAttributeはXMLの属性のことで、次のAttributeは.NETの属性のことじゃ。

440 :デフォルトの名無しさん:03/08/12 13:17
>>439
[XmlAttributeAttribute]でできました。ありがとうございます。
System.Attributeの派生クラスでないと属性には使えないから
System.Xml.XmlAttributeはSystem.Xml.XmlNodeの派生クラスでXMLの属性なんですね。

C#,MC++ともにTest.HogeAttribute が属性の[]の中では
[Test.Hoge]か[Test.HogeAttribute]と書けるみたいです。

だから、C#で[XmlAttribute]と書かれたものはXmlAttributeかXmlAttributeAttributeのはず。
したがって、属性クラスのSystem::Xml::Serialization::XmlAttributeAttributeを使えばよい。

ただ、MC++で[XmlAttribute]とするとエラーが起きる模様。(->XmlAttributeAttributeとは自動解釈しない?(安全策?))
また、C#では[XmlAttribute]でも可能。でも、カーソルを持っていくと、
ツールチップにSystem.Xml.XmlAttributeと表示されるみたいだが???...。
(->C#コンパイラはXmlAttributeAttributeを選んでるのかな?)

usingする前提だと名前の衝突で紛らわしいことになるからフルネームで
[System::Xml::Serialization::XmlAttributeAttribute]
としておいたほうがいいのかな。
ただ、System::Xml::Serialization::XmlAttributeAttributeAttributeができたとき,
C#とMC+でどうなるのかは試してないです。


441 :山崎 渉:03/08/15 15:40
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

442 :デフォルトの名無しさん:03/08/20 20:07
checkedステートメント
は使えないのでしょうか?


81 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)