managed C++ やろうぜ!!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGmanagedC++のスレが無いじゃないか。
折角.NETに生き残ったC++、みんなで語ろうぜ。
0404デフォルトの名無しさん
NGNGいや、「まずC#が先にあって〜」みたいな切り口だった。
0405山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0406デフォルトの名無しさん
NGNG>>404
まず.NETがあって、じゃないかなあ
0407デフォルトの名無しさん
NGNGC# でラッパクラス作るよりも、
Managed C++ で書き直しちゃう方が早かった。
てか C# の DllImport うんちゃらがよう分からんですタイ。
Managed C++、思ったより使えそうな感触。
0408デフォルトの名無しさん
NGNGそのための MC++ です
日本語の参考書籍・・・無いよなあ・・・
0409デフォルトの名無しさん
NGNG6800円かそこらの分厚い本で
VC++.NET 解説みたいなのんが有ったんで
チラっと眺めてみたんですが、
Manged C++ に関する記述は 20 ページかそこらだけ。
この厚さで... と涙せずにはいられませんでした。
つーか .NET と無関係な VC++ な記述が殆どを占めてて泣けた。
チラっと見ただけなんで間違ってるかも知れないけど。
0410洗濯猫
NGNGMFCで作ったコードをマネージドに変換して
コンパイルして、
CRLで動くようにできますか?
またドキュメントビューアーキテクチャを
マネージドシープラで実現することは可能ですか?
0411デフォルトの名無しさん
NGNGhttp://yahooo.s2.x-beat.com/linkvp/linkvp.html
0412デフォルトの名無しさん
NGNG間にラッパークラスを挟めば可能
0413デフォルトの名無しさん
NGNGAPI じか叩きしたようなのほど効果有るっぽい。
ところで参照渡しすれば C# で ref する扱いになるみたいだけど
out する扱いは無理ぽ?
ref だけで用事足りるからどうでも良いっちゃ良いのだけど
なんか無駄に気になったので。
0414デフォルトの名無しさん
NGNG{
if (m->Msg == WM_NOTIFY)
{
LPNMHDR nmhdr = (LPNMHDR)m->LParam;
}
}
Managed C++でこういう感じにキャストしたい場合は、どういう方法でやればいいんでしょうか?
dynamic_castなどでもだめでした。。
0415414
NGNGで出来ました。。
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG解像度変更を検出したいんだけど・・・。
0418417
NGNGvoid WndProc(Message* m) {
// ...
}
ヘルプにはFormでWndProcをオーバーライドすると書いてあるんですが、
オーバーライドすると' マネージ型で、仮想メソッドへのアクセシビリティを少なくすることはできません。」
とエラー吐かれます。
そもそも1行目の [System::Security... は何を意味するかと子一時間...
0419デフォルトの名無しさん
NGNG0420417
NGNGvoid WndProc(Message* m) {
// ...
}
これだけでいけますた。
さっきのエラーはprotectedで宣言された仮想関数をprivateには出来ねーぞって事でした。
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNGほんとだ使えるようになってる。
MC++で
インデクサとforeachは使えないのでしょうか?
(演算子がC++の時のようにオーバーロードできないような...)
0423デフォルトの名無しさん
NGNG#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;}
};
0424422(続き)
NGNGpublic 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;
0425422(続き)
NGNGBookShelf *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;}
0426デフォルトの名無しさん
NGNGhttp://www.vertigosoftware.com/Quake2.htm
カコ(・∀・)イイ!
0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430428
NGNG0431デフォルトの名無しさん
NGNGへー。
こんな感じでやってみたけど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() );
0433デフォルトの名無しさん
NGNG>こんな感じでやってみたけどOKだった。
読んだ瞬間ダメだったのかと思って焦った。
ところでこのToString()はいらないよ。
>Console::WriteLine( v[23]->ToString() );
0434デフォルトの名無しさん
NGNGstatic_castでいいのかな?
dynamic_castで型のチェックした方がいいと思うんだが。
0435425
NGNGほんとですね。
動的にチェックするように変更しました。
(キャスト失敗時に 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 );
0436デフォルトの名無しさん
NGNG0437山崎 渉
NGNG0438デフォルトの名無しさん
NGNG__gc struct Address{
[XmlAttribute] String *Name;
};
の[XmlAttribute]のアトリビュートだけがなぜか見つからないと出ます。
解決策はないのでしょうか?
(他の属性はSystem.Xml.dllを参照の追加してOKでした)↓
[XmlElementAttribute][XmlArrayAttribute][XmlRootAttribute]
0439デフォルトの名無しさん
NGNG最初のAttributeはXMLの属性のことで、次のAttributeは.NETの属性のことじゃ。
0440デフォルトの名無しさん
NGNG[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+でどうなるのかは試してないです。
0441山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0442デフォルトの名無しさん
NGNGは使えないのでしょうか?
0443デフォルトの名無しさん
NGNG使えないようですね。
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNGDel厨です。
最近C#がだいたい使えて来たので、
MC++→MFC→非MFCと言う順番に学習したいと思ってます。
C♯→MC++移行で参考になるようなサイトないでしょうか。
たとえば、初心者はC♯よりもVBよりもMC++なら将来ネイティブアプリ作れるとか、
たとえばC++なのに.NETなら簡単にブラウザを作れるみたいな。
無理?
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNGカエレ!
0448デフォルトの名無しさん
NGNG参照の追加をしているのですが、
test.cpp で普通にインクルードしたいのですが、例えば
#include<string>とすると
test error LNK2001: 外部シンボル ""void * __cdecl memmove(void *,void const *,unsigned int)" (?memmove@@$$J0YAPAXPAXPBXI@Z)" は未解決です。
test error LNK2001: 外部シンボル ""void __cdecl __CxxCallUnwindDtor(void (__thiscall*)(void *),void *)" (?__CxxCallUnwindDtor@@$$J0YAXP6EXPAX@Z0@Z)" は未解決です。
test error LNK2001: 外部シンボル ""void __cdecl operator delete(void *)" (??3@$$FYAXPAX@Z)" は未解決です。
.... (計:30件)
というエラーが出てしまうのですが、解決策はあるのでしょうか?
(VC2003,XP)
NG: vector,list,deque,string,locale,boost/shared_ptr.hpp ....
OK: cstdlib,cstdio,boost/timer.hpp,typeinfo,boost/scoped_ptr.hpp ....
0449デフォルトの名無しさん
NGNGmanagedC++はなんでフォーム継承できないんだ?????
0450デフォルトの名無しさん
NGNGコンポーネントを相変わらず書いている私は逝ってヨシですか?
移行するタイミングが難しいんだあ。
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGttp://download.microsoft.com/download/9/9/c/99c65bcd-ac66-482e-8dc1-0e14cd1670cd/C++%20CLI%20Candidate%20Base%20Draft.pdf
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNG結構居るみたいですよ、そんな人。逆もできるしね。
.NETの相互運用能力ってちょっといい感じ。お気に入りです。
0455デフォルトの名無しさん
NGNG>>452
C++/CLIだって。
N* hn = new N; // allocate on native heap 40
N& rn = *hn; // bind ordinary reference to native object
R^ hr = gcnew R; // allocate on CLI heap
R% rr = *hr; // bind tracking reference to gc-lvalue
^とか%使い回すあたり、なんか好きだ
CLIヒープクラスも指定子がrefになって、見た目に分かりやすいな
いいかげん、__hogeな書式のキーワードはうんざりだからな
リリースはいつごろだろう
0456デフォルトの名無しさん
NGNGクラスの種類にかかわらず、newもgcnewもできる?
もう少し読もう
0457デフォルトの名無しさん
NGNGC++のリファレンスとの関連性はあるんかな
もう少し読もう
0458デフォルトの名無しさん
NGNGやっぱ単に__gc → refか。
for eachはよいね。
0459デフォルトの名無しさん
NGNGこの時点で、
__gcクラスも指定子がrefになって、見た目に分かりやすいな
と言えばよかっただけか。
てか、誰もいないじゃん。一人芝居ショボン
0460デフォルトの名無しさん
NGNGそのときはアホな設計だなぁ、と思ったのですが、
手元にあるショボイ入門書を見ると「単純型」というのがあるので、
これが Javaでいうプリミティブ型に相当するのではないかと思うのですが、
実際のところどうなんでしょうか。教えて Teach Me
0461デフォルトの名無しさん
NGNGそうだよ
value classのこと
Javaより柔軟だから
0462461
NGNGそもそも、「managed C++は整数もかならず整数オブジェクトになる」んだっけ?
教えて Teach Me
0463461
NGNGManaged C++ ≒ Java
__value class≒primitive type
__gc class≒class
__box(__value class)≒class Wrapper { primitive type member; }
こんな感じ
0464デフォルトの名無しさん
NGNGjavaで言うところの、primitive型とclass型の間を、比較的簡単に
行き来できるのが.NET系の言語の特徴。
MC++でもそれを利用できるが、intと書いただけでIntegerオブジェクトが
生成されるわけではない。
value型とclass型の違いはCLRでも重要な事項なので、
MC++に触れる前にしっかり理解しておいたほうがいいと思う
0465デフォルトの名無しさん
NGNGMC++でも、intはSystem::Int32 value type(simple type) だと思うよ
0466デフォルトの名無しさん
NGNGコンテキストに依存するのでは?
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGそう書いたつもりが、そうなってなかった
宇都氏
0469デフォルトの名無しさん
NGNGそろそろ飼いならした人が増えてきてもいいんじゃないかなー
日本語の解説書が欲しいところ
0470デフォルトの名無しさん
NGNG出版社を探して自分で翻訳;-p
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/1893115283/
このへんかな。前者は持ってる。
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNGttp://weblogs.asp.net/slippman/
0475デフォルトの名無しさん
NGNGかな〜り遅いレスだが、これは msvcrt.lib, msvcrtd.lib をリンクすればいい
でも、なるべく #pragma unmanaged のエリアで使おう
0476デフォルトの名無しさん
NGNGmanaged C++ で boost::spirit のC構文のサンプルをコンパイルしたんだが、
C1129 つーエラーが出て歯がたたねぇ
普通のC++としてはサンプルは無事動くのに、managed C++ じゃテンプレートの
展開が違うのか?
0477デフォルトの名無しさん
NGNG自己解決。boostをインクルードしているとこまでまとめて unmanaged 指定してやったら
コンパイルは通過。ただし、リンクエラーLNK1254でだめぽ
r'⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒X⌒ヽ ⊂゙⌒゙、∩
ヽ__乂__乂__乂__乂__乂__乂__乂__乂__乂__乂__乂__乂__乂__乂__ノ ⊂(。Д。)
0478デフォルトの名無しさん
NGNGコードの中で混在させる事は出来ますか?
.NETは資料が少ない(C++の場合)ので、自分にはメインでは使えないのですが
簡単にスレッド起こせたり、フォームの半透明とかが簡単だったりするんで・・・
0479デフォルトの名無しさん
NGNG> 自分にはメインでは使えないのですが
> 簡単にスレッド起こせたり、フォームの半透明とかが簡単
そういう部分をメインというと思うんだがどうか。
0480デフォルトの名無しさん
NGNGC#で
Byte[] sendBytes = Encoding.ASCII.GetBytes("01"+textBox1.Text+" "+textBox2.Text+"\0");
こんな感じで書いてたコードを
managedC++で書き直したいのですが
どうすれば良いのでしょうか?
Byte sendBytes[] = Encoding::ASCII->GetBytes("01" + textBox1->Text + " " + textBox2->Text + "\0");
これだと、ポインタにポインタが足せないと言われてしまいます。
0481デフォルトの名無しさん
NGNG地道に String::Concat かな?
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNGとりあえず
sprintf(buf2,"01%d %d\0",textBox1->Text,textBox2->Text);
としました。。。(Cの知識しか殆ど無かったりします。
0484デフォルトの名無しさん
NGNG0485483
NGNG>>480で書いたC#のコードと
>>483でやったコードの結果が違うようです。
一応、この文字列をUDPでサーバーへ転送するのですが
サーバー側でフフフという文字が大量に発生してしまいます。(\0が無い為?
何故このような事がおきるのでしょうか?
0486デフォルトの名無しさん
NGNGこんな感じで\nを付けてみ
0488デフォルトの名無しさん
NGNG{
public class ホゲホゲ
{
}
}
C#で上のように書いたコードを Managed C++ で書き直した場合どうする?
namespace 会社名.プロジェクト名
{
__gc class ホゲホゲ
{
};
}
って書けない?
namespace を一発で書くような方法をきぼんぬ。
0489デフォルトの名無しさん
NGNGByte receiveBytes[] = udpClient->Receive(&RemoteIpEndPoint);
String *returnData = Encoding::ASCII->GetString(receiveBytes);
MessageBox(NULL, returnData, "", MB_OK);
こんな感じで受信結果をMessageBoxで表示したいのですが
型が違うため出来ません。
どのようにすればいいのでしょうか?
0490デフォルトの名無しさん
NGNG・エラーの詳細
を書け
0491489
NGNGここで
error C2664: 'MessageBoxA' : 2 番目の引数を 'System::String __gc *' から 'LPCSTR' に変換できません
マネージ型をアンマネージ型に変換できません。
です
0492489
NGNGsprintf(RevBuf,"%s",returnData);
こんな感じで、無理やり変換しましたけど。。。
なんだかなぁ・・・
0493デフォルトの名無しさん
NGNGString型をC文字列に変換するメソッドがあると思うけど。
0494デフォルトの名無しさん
NGNGなんでMC++はこんなに普及しないんだ?
時期OSの仕様がああなった以上、.NETは避けて通れない道
現に、C#の書籍や情報はあちこちに溢れてる
でも、C++で.NETってのがこんなに普及してないのが不思議でしょうがない。
なんでだろう・・・・・
俺も勉強したくても書籍はないわWebにも殆ど資料ないわ、MSDNにはC#とVB.NETのみだわで大変
もしかしてC#の方が楽って事?
Win32APIやMFCで作った過去の遺産を使いたいって人も居ると思うんだが・・・
0495デフォルトの名無しさん
NGNG聞いたことあるけどホントですか?
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNGMC++とはまた別のものを作ってるという話もあるよ
0498デフォルトの名無しさん
NGNGMC++はつなぎなんじゃないの
0499デフォルトの名無しさん
NGNG.NETでマネージドC++なんか使ってるやつの気がしれない
0500デフォルトの名無しさん
NGNGこれもMSの計略か・・・・
0501デフォルトの名無しさん
NGNGネイティブじゃないなら存在意義が無いし
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGCOM化するのが正統なんだろうけど、それもメンドいことあるし。
■ このスレッドは過去ログ倉庫に格納されています