managed C++ やろうぜ!!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGmanagedC++のスレが無いじゃないか。
折角.NETに生き残ったC++、みんなで語ろうぜ。
0183デフォルトの名無しさん
NGNGMFCだってあとは現状維持程度で、新しいことがしたければ.NETへ逝け!でしょ?
おれは今のところWindowsは開発対象でないので様子見。
0184180
NGNGhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/vcerrLinkerErrorLNK2023.asp
だけど解決方法が分かりません。Link.exeに正しく
E:\Program Files\Microsoft Visual Studio .NET\Common7\IDE\msobj10.dll
を読み込ませる方法はないでしょうか?
0185180
NGNGE:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\msobj10.dll
を上の.netSDKのDLLで上書きしたらLNK2023は出なくなりました!
という訳でVS6、.netSDK、PlathomeSDKの三つを上手く組み合わせれば
まだまだ開発はできそうです。
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGというかtemplateの制限はどれくらい解けてます?
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNGそれなりに解けてる
0190180
NGNG%LIB%にパスを設定したけどダメなんですよ。なんでですかね?
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGほう・・・VBが使えるVC・・・訳わからんな。
0194デフォルトの名無しさん
NGNGだよな。
カーネル内の関数をVC++で作成したものだろうがVBで作成したものだろうが呼び出せるのと同じだよな。
0195194
NGNG0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGやだ
0198デフォルトの名無しさん
NGNGC#やれ
0199デフォルトの名無しさん
NGNG質問書けよ。助けて!じゃわからん。
0200デフォルトの名無しさん
NGNGunsafeキーワード使うことで
全てC#でできるんですか?
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGそれはそもそもmanaged c++にはない
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGunsage = age
0206デフォルトの名無しさん
NGNGマネージ コードとアンマネージ コードを混在できるため、
下位レベルのアンマネージ API などに直接アクセスできます。
Visual C++ とマネージ拡張を使用して、最大パフォーマンスの
マネージ API を記述できます。
この辺りしかmanaged C++を使う理由はないな。
C#でも十分パフォーマンスをあげるコーディングの仕方が
用意されてるみたいだし。またx86ネイティブなコードを
書く機会もWindowws上じゃ減るんだろうなぁ。
0207デフォルトの名無しさん
NGNGMC++のメリットって、APIの構造体(またはクラス)を直接使えることぐらいじゃないかな。
APIの引数の型が単純だったら、C#とかでも難なく使えるし。
0208デフォルトの名無しさん
NGNGいいえ。C#は何でもできる言語ではありません。VB.NETでできるのにC#では
できないこともあります。MC++でならできるけど、C#やVB.NETではできない(または限定的)と
いうこともあります。
>>206さんの言うことは一部真だと思いますが、C++ユーザーがC#に進んで混乱するくらいなら
MC++のほうがいいという選択もありえると思います。
0209デフォルトの名無しさん
NGNGちなみにMC++のアンマネージコードの呼び出しはP/Invokeではありません。
P/Invokeよりも数十倍高速な仕組みを利用します。
0211デフォルトの名無しさん
NGNGこの辺りかな?
とにかく高速なラッパーという用途だけはC++に残っているわけね。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNGかなり上位に出てきます。
0216デフォルトの名無しさん
NGNGunmanagedコードを使わないようにがんばろう。
0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG/clr つければできるよ。一緒に使えないオプションが多くて面倒だけど。
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNGよく分かったよ。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNGVC++に関していえば、
過去の資産を引き継ぐという意味じゃ、
互換性を切り捨てたVBとは役割は全然違う。
10年はなくならない。
それにMC++は多分内部的にかなりC#とコードを
共有してるような気もするから、なくなることは
ないと思う。
あくまで希望的観測だけどどうでしょう?
0226デフォルトの名無しさん
NGNGMC++ -> MSIL -> C#
いいデコンパイラが出れば良い線行くかも。
MC++ -> MSILとC# -> MSILが似ていれば。
0227デフォルトの名無しさん
NGNGFILETIME(WinBase.h)とSystem::Runtime::InteropServices::FILETIME
みたいに名前がかぶっちゃうようか場合はどうしてる?
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG解決しました。どうもです。
0230デフォルトの名無しさん
NGNG・使用するDLLを#pragma comment(lib, "XXX.lib")と指定する。
・使用する.net frameworkのDLLをusing <XXX.dll>と指定する。
とこれだけでいいんでしょうか?
しかもやってて思ったのは::MessageBox関数みたいに#define
切られてるのはどうしようもないような気がしてきました。
System::Windows::Forms::MessageBoxWはありませんとか言われて・・・
0231デフォルトの名無しさん
NGNGdllなのに拡張子libとは?
0232デフォルトの名無しさん
NGNGLINK : fatal error LNK1104: コンパイラは、ファイル 'kernel32.dll' を開くことができません
こうなっちゃうんですよ。
ところでこうやってコンパイルしたプログラムはmanagedってことに
なるんですかねぇ?もちろん全て__nogcという意味でいいのですが。
なんかMC++ってなんなのかよく分りません。
ildasm.exeでもちゃんと見れるからどうなってるのかさっぱりです。
0233デフォルトの名無しさん
NGNG#pragma comment(lib, "kernel32")
これでOKでした。拡張子は入りません。
0234デフォルトの名無しさん
NGNG既存のプログラムをC#で書き直すぐらいなら
MC++を活用した方が全然いいと思うのですが、、、
これでDLLを作ればC#なんかからusing MyLib;
なんて出来ていいと思うのですが。
0235デフォルトの名無しさん
NGNGライブラリの移植用としては上の方で語られているね。
すくなくとも.NET用に開発されたC#がもっとも.NETとの親和性が高い。
0236デフォルトの名無しさん
NGNG個人的にはSun派とMS派のどっちでもないけど、
.netが過去との互換性を重視してる点がいいと思うんですよ。
MC++あっての.net(w
0237デフォルトの名無しさん
NGNG俺は心機一転派なのでC#のパイオニアを目指すw
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG最強だね。それ。
0240デフォルトの名無しさん
NGNG最低でも10年はかかるんだろうなぁ。opensource is always late
なんてAlan Coxさんが言ってたけどまさにそんな感じか、、
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG【Essential Guide To Managed Extensions For C++】
http://www.amazon.com/exec/obidos/ASIN/1893115283/
【Managed C++ and .NET Development】
http://www.amazon.com/exec/obidos/ASIN/1590590333/
【Visual C++(r).NET Developer's Guide】
http://www.amazon.com/exec/obidos/ASIN/0072132817/
【Programming with Microsoft Visual C++ .NET, Sixth Edition (Core Reference)】
http://www.amazon.com/exec/obidos/ASIN/0735615497/
GotDotNetのMC++
http://www.gotdotnet.com/team/cplusplus/
http://www.gotdotnet.com/team/upgrade/c++.aspx
0243デフォルトの名無しさん
NGNG【Microsoft Visual C++ .NET Step by Step】
http://www.amazon.com/exec/obidos/ASIN/0735615675/
COMとの相互運用に関して特化した本
【.NET and COM: The Complete Interoperability Guide】
http://www.amazon.com/exec/obidos/ASIN/067232170X/
C++プログラマたるもの、内部について無知は許されない!
【Inside Microsoft .NET IL Assembler】
http://www.amazon.com/exec/obidos/ASIN/0735615470/
【Compiling for the .NET Common Language Runtime】
http://www.amazon.com/exec/obidos/ASIN/0130622966/
【Essential .NET: The Common Language Runtime (Volume 1)】
http://www.amazon.com/exec/obidos/ASIN/0201734117/
発売してないものも含まれているので注意してください。
それにしても思ったより少ない気もする・・・
0244デフォルトの名無しさん
NGNGこれからでそ
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGもちろん。そのための「M」ですから。
0247デフォルトの名無しさん
NGNG/CLRオプションを付けたときはデフォルトでmanagedコードに
なるみたいですが、managedコード=ILという訳ではないんですよね?
どうもGCとmanagedとILの関係が分らんのです。
x86バイナリにコンパイルされたC++managedコードにGCの機能が含まれて
いるっていう組み合わせもありえるんですよね?
0248デフォルトの名無しさん
NGNGC#に負けるな、あげ!
0249デフォルトの名無しさん
NGNG/clrでmanaged codeを吐くよ。managed codeって目に見えるものじゃなくて
概念的なものだと思う。ILであることもmanaged codeの一側面ではあるけど。
__gcのクラスはmanaged dataになる。managed dataとmanaged codeの違いは
意外にみんな理解していないようだ。
x86バイナリのlibをリンクしても、それがmanagedになるわけじゃないよ。
CLRはunmanaged codeを実行することもできるんだよね、これも意外に
知られていないが。
0250デフォルトの名無しさん
NGNG難しいです。なにかよいドキュメントがあればぜひお願いします。
0251デフォルトの名無しさん
NGNGmanaged data 【マネージ データ】
共通言語ランタイムによって有効期間が管理されるオブジェクト。
共通言語ランタイムはオブジェクトのレイアウトを自動的に処理し、
それらのオブジェクトへの参照を管理し、不要になったオブジェクトを解放します。
managed code 【マネージ コード】
共通言語ランタイムとの "連携のコントラクト" に従って実行されるコード。
マネージ コードは、ランタイムがメモリ管理、言語間の統合、
コード アクセス セキュリティ、オブジェクトの有効期間の自動管理などの
サービスを提供するために必要とするメタデータを提供する必要があります。
Microsoft Intermediate Language (MSIL) に基づくコードはすべて、
マネージ コードとして実行されます。
unmanaged code 【アンマネージ コード】
共通言語ランタイムの規則および要件に関係なく作成されたコード。
アンマネージ コードが共通言語ランタイム環境で実行される場合は、
最小限のサービスで実行されます。たとえば、ガベージ コレクションは
実行されず、デバッグ機能も限定されます。
これから考えると、いわゆるmanaged C++っていわれてるプログラムは
managed dataとmanaged codeの規約を満たしているっていうわけですね。
ILかx86バイナリかどうかに関係ないく。GC云々の話は規約を満たしている
managed codeが生成したmanaged dataにおいて可能ということですか。
そして規約外のコードが全てunmanaged code。
となると、既存のC++プログラムを/CLRオプションでコンパイルした場合は、
例えそこからunmanaged codeを呼び出していたとしてもmanagedになる、
ってことですね。
もっと勉強しないと。。。
0252デフォルトの名無しさん
NGNGところがどっこい、C#ではポインタを使うためにunsafeキーワードを
使うと、アンマネージドになってしまうらしい。
C#ではポインタの使えるマネージドコードというのは記述できないのかな?
それとも上のドキュメントの記述が紛らわしいだけなのか、、
0253デフォルトの名無しさん
NGNG綺麗に線引きするには内部の動作を把握してないと無理。
だからみなあいまいな説明しかできない。
0254デフォルトの名無しさん
NGNGアンセーフとアンマネージは違う。アンセーフはマネージコードです。
CLRはマネージコードを実行します。アンマネージコードも一部実行できます。
アンセーフはマネージですから完全にCLRの傘下で実行されます。
0255デフォルトの名無しさん
NGNGマクロを #undef するよろし。
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG厨でrjc
0259デフォルトの名無しさん
NGNGATLで /clr をつければできると思う。
0260デフォルトの名無しさん
NGNGそれしかないんだけど、なんかきたないね
0261デフォルトの名無しさん
NGNG1はどこいった?(ワラ
0262デフォルトの名無しさん
NGNGなるんだけどなんでだろ・・・?
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
__gc class Form1 : public Form
{
public:
Form1()
{
// this->Size = *__nogc new Size(400, 300);
this->Size = *__nogc new System::Drawing::Size(400, 300);
}
};
[ STAThread ]
int __stdcall WinMain(void)
{
Application::Run(new Form1);
return 0;
}
/*
cl /CLR /FU mscorlib.dll /FU System.dll /FU System.Drawing.dll
/FU System.Windows.Forms.dll Form1.cpp
*/
0263262
NGNGForm1()
{
// Size s(400, 300);
System::Drawing::Size s(400, 300);
this->Size = s;
}
0264デフォルトの名無しさん
NGNGFormにSizeプロパティがあるのと関係?
0265262
NGNGあ〜、そういうことですか。Fontクラスもだめでした。
this->Size と System::Drawing::Size の判断ができないのか・・・。萎え。ヽ(´Д`)ノ
それはともかく、ありがとうございます。
0266デフォルトの名無しさん
NGNGhttp://www.codeproject.com/managedcpp/
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGSystem::Resources::ResourceManagerのGetObject
が、重なってしまいます。
ms-help://MS.NETFrameworkSDK.JA/vcmxspec/html/vcmg_AmbiguousReferences.htm
を見て完全限定名を使ってみたりしてるんですがwingdi.hの方で
#ifdef UNICODE
#define GetObject GetObjectW
#else
#define GetObject GetObjectA
#endif // !UNICODE
というようにdefineされてしまってResourceManagerのGetObjectがうまく使えません。
この場合は、どうしたらいいんでしょう?
System::Resources::ResourceManager *rm=
(new System::Resources::ResourceManager(S"testForm",Assembly::GetExecutingAssembly()));
this->set_Icon(dynamic_cast<System::Drawing::Icon *>(rm->GetObject(S"MainIcon")));
0269デフォルトの名無しさん
NGNGms-help://MS.VSCC/MS.MSDNVS.1041/vcmxspec/html/vcmg_MacrosandthePreprocessor.htm
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGリソースからボタン貼り付けてボタンダブルクリックするとMFCクラスウィザードとか出てきますが
MFCでしかウィザードは使用できないのですか?
manageC++ではひたすらコード書き込みですか
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGお前のすぐ上
0274login:Penguin
NGNGっていいたいところなんだけど、
C#の方が便利だし綺麗だ。
これが現実。
0275_
NGNG0276デフォルトの名無しさん
NGNGhttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1638&forum=7
0277_
NGNG0278デフォルトの名無しさん
NGNG何だかなあ...
0279あぼーん
NGNG0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG0282デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています