managed C++ やろうぜ!!
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGmanagedC++のスレが無いじゃないか。
折角.NETに生き残ったC++、みんなで語ろうぜ。
0697696
NGNGAAA* aaa[];
public:
__property AAA* get_AAAList()[] { return aaa; }
__property void set_AAAList(AAA* value[]) { aaa = value; }
こうでした。
う〜ん、それにしてもgetの時の[]の位置って普通わからないよなぁ
0698デフォルトの名無しさん
NGNGAAA* __gc[] だったかな。
0699デフォルトの名無しさん
NGNG戻り値をAAA*[]にして小一時間程悩むのは誰もが通る道だろうな。
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNG070669式フリーPG ◆hND3Lufios
05/02/14 21:35:520707デフォルトの名無しさん
05/02/21 20:07:590708デフォルトの名無しさん
05/02/23 21:06:22何に表示したいんだ?
まあ、とりあえず、標準出力なら
Console.Write("{0:x}", num);
string.Format ってのもあり。
0709デフォルトの名無しさん
05/02/23 21:12:51C++/CLI だと
(3).ToString("X"); とか
0710デフォルトの名無しさん
05/02/25 16:00:380711707
05/02/25 20:45:330712デフォルトの名無しさん
05/03/09 13:29:18http://www.codeproject.com/managedcpp/
の "C++/CLI" 項目の記事はどれもいい。
S.B.リップマン氏の記事は必読。
前からある有名なやつが、>661 にあるので、
最近の MSDN Magazine の "Hello, C++/CLI" が、
http://msdn.microsoft.com/visualc/default.aspx?pull=/msdnmag/issues/05/02/purec/default.aspx
0713デフォルトの名無しさん
05/03/20 10:38:38"Generic Programming Under .NET"
http://msdn.microsoft.com/msdnmag/issues/05/04/PureC/
0714デフォルトの名無しさん
05/03/20 18:07:41日本語資料ならなんかGDNJで晒されてたぞ
0715デフォルトの名無しさん
05/03/20 19:35:34C++/CLI 言語仕様
http://www.stdblue.net/cgi-bin/vene/wiki/wiki.cgi
0716デフォルトの名無しさん
05/03/20 19:51:080717デフォルトの名無しさん
05/03/20 23:41:360718デフォルトの名無しさん
2005/03/21(月) 11:43:09CLR の事と間違えてんじゃねぇの?
まぁ、CodeDOMあるから、C++の実行時解釈もできるけど
0719デフォルトの名無しさん
2005/03/25(金) 22:46:04C++/CLIの追加機能の意味(というか用途)がわからんものが多いッス
genericsとtemplateの使い分けはどうするんだとか
interfaceは純粋仮想関数で事足りるんじゃねぇの?とか
0720デフォルトの名無しさん
2005/03/26(土) 02:42:13C++/CLI というから、C++に最低限の機能を追加したのかと思いきや、もう全然違う言語に感じます。
個人的には、ガベージコレクタだけで十分なんだが。(しかも、もっとシンプルな形で)
0721デフォルトの名無しさん
2005/03/26(土) 11:38:33ポインタとハンドル、ヒープとCLIヒープ、そして、CLI経由での互換性、C++としての旧来の
ライブラリ互換性、コンパイル時展開されるテンプレートと、コンパイル時には生成型と
いう形で一次展開され実行時に正式に型に合わせた形で展開されるジェネリクス
基本的にはC++/CLIはC++に対するCLIのアドオンという位置づけをもっと明確に示して
説明するべきではなかったのかなぁと思われ
ぶっちゃけた話、JVMをJNI経由でC++から直接操作してるようなものだし
>>719
CLIの対応型を純粋仮想関数だけのネイティブ・クラスと混在させないために必要なんだよ
混合型だとC#やVBから呼べなくなるから
>>720
>>714 の8章を読んでみるといいよ。valueクラスのところとか、Javaに対する皮肉や
パフォーマンスに関する苦労がさりげなく感じ取れる(w
0722デフォルトの名無しさん
2005/03/27(日) 23:46:32への対応が強化された
って理解でいいのかな
0723デフォルトの名無しさん
2005/03/28(月) 00:34:090724デフォルトの名無しさん
2005/03/28(月) 21:31:570725デフォルトの名無しさん
2005/03/29(火) 16:59:420726デフォルトの名無しさん
2005/03/29(火) 18:28:010727デフォルトの名無しさん
2005/03/30(水) 02:25:04私はC++のポリシーの無さが限りなく心地よいのだが、それでも
確かに.netを用いた開発においてはC#の方がC++/CLIよりも開発
効率の点で勝っていることを認めざるを得ない。
0728デフォルトの名無しさん
2005/03/31(木) 06:16:09出来るとしたらそのときはmanagedC++使うんですか?
0729デフォルトの名無しさん
2005/03/31(木) 10:32:17D言語とMC++、C++/CLI には直接的な関係はありません
DからのC/C++関数呼び出しはこちらのスレで聞いてください
D言語 Part 6
http://pc8.2ch.net/test/read.cgi/tech/1109933426/
0730デフォルトの名無しさん
2005/04/09(土) 22:31:08正式な仕様が公表されていないから、実際にどうなっているのかWhidbeyで動かして
見ないとわからんと言うのは問題だな
0731デフォルトの名無しさん
2005/04/10(日) 11:09:19でアップデートされたときから、サポートされてるよ。
http://www.microsoft.com/downloads/details.aspx?FamilyID=afd04ff1-9d16-439a-9a5e-e13eb0341923&displaylang=en
最初のバージョンとはかなり違って、公表されてる仕様に近くなってるから、
覚悟してアップデートするように。
0732デフォルトの名無しさん
2005/04/10(日) 12:04:05入れ直した憶えがある
構文が公開仕様に近いなら、試してみたいが・・・うーん
ファイナライザとか実装されてる?
0733デフォルトの名無しさん
2005/04/10(日) 17:02:26C#はもうJIS規格になったよ。見捨てられないね。
0734デフォルトの名無しさん
2005/04/17(日) 08:13:50まだ9x系使ってる人もいるからな…
0735デフォルトの名無しさん
2005/04/17(日) 08:51:22実現していますように
ところで、正式な仕様はまだ公開されないのかねぇ
0736デフォルトの名無しさん
2005/04/19(火) 10:56:18Express 版は一般向けに出てきた。
まあ、.NET Framework 2.0 SDK Beta2 さえインストールすれば、
C++/CLI の safe モード機能はすべて使えるはずだから、暇なときに入れとくことにするよ。
STL.NET が付くのはどれなのかな。
http://lab.msdn.microsoft.com/vs2005/downloads/default.aspx
0737デフォルトの名無しさん
2005/04/19(火) 21:32:49STL.NET はまだでしょう?
0738デフォルトの名無しさん
2005/04/20(水) 11:21:09・インデックスド・プロパティ:動作
・ファイナライザ:動作
・パラメータ配列:動作
・for each:動作
あとなんかあったっけ?
0739デフォルトの名無しさん
2005/04/20(水) 11:26:34コンストラクタでこうするヤシ
TestClazz() : _name(gcnew String(L"My Name")) { }
基本的な言語機能は出そろったのかな
0740デフォルトの名無しさん
2005/04/20(水) 12:21:150741デフォルトの名無しさん
2005/04/21(木) 13:49:57System::StringをLPSTRに変換したいのですが
どうしたらいいでしょうか?
0742デフォルトの名無しさん
2005/04/21(木) 14:11:22array<wchar_t>^ arr = stringVal->ToArray();
pin_ptr<wchar_t> pptr = &arr[0];
で pptr を WideCharToMultiByte に wchar_t* として渡せばいい
#include "windows.h"
とライブラリの明示的リンクを忘れないこと
0743デフォルトの名無しさん
2005/04/21(木) 14:19:33大抵のAPIはいちいちMBCSへの変換をかますことなく、pin_ptr を渡せるので
そっちをお勧めする
0744デフォルトの名無しさん
2005/04/21(木) 17:28:14stdcli::languageを使うにはどうしたらいいのでしょうか?
using namespace stdcli::languageと書いたのですがダメでした
何を参照すればいいのでしょうか?
0745デフォルトの名無しさん
2005/04/21(木) 17:39:01Beta2 では pin_ptr や safe_cast, array<> は stdcli::language 宣言しなくても使えるように
なったよ。だから、逆に宣言してはいけない(はず)
0746デフォルトの名無しさん
2005/04/21(木) 17:48:23Beta2とかよくわからないです(´Д`;)
でも
array<wchar_t>^ arr = stringVal->ToArray();
を書いたら
error C2059: 構文エラー : '^'
error C2065: 'array' : 定義されていない識別子です。
ってエラーが出てしまいます。
0747デフォルトの名無しさん
2005/04/21(木) 17:59:31だったら、 >>615 なんだけど
0748デフォルトの名無しさん
2005/04/21(木) 18:03:41多分普通のmanaged C++ なのかなぁ
Microsoft Visual Studio .NET 2003を使ってます。
>>615を試した方がいいですかね?
できれば>>615を、もうすこし解説してもらえると助かります。
0749デフォルトの名無しさん
2005/04/21(木) 18:19:41managed C++ にはユーティリティ関数がいくつか用意されていて
#include <vcclr.h>
で使えるようになります。
あとは、
PtrToStringChars で System::String __gc * 型を LPCWSTR に変換して、それに
WideCharToMultiByte を実行するって手順になります
これでだいたい判るよね?
0750デフォルトの名無しさん
2005/04/21(木) 18:22:00ありがとうございます(^∀^ヾ|
なんとか出来そうな感じがしてきました
0751デフォルトの名無しさん
2005/04/21(木) 19:42:41ウォッチで中身が確認できないのですが
解決方法ないでしょうか?
*Microsoft Visual Studio .NET 2003を使ってます。
0752デフォルトの名無しさん
2005/04/22(金) 09:50:260753デフォルトの名無しさん
2005/04/22(金) 11:12:290754デフォルトの名無しさん
2005/04/22(金) 11:47:16よくあることなの?
デバッカーが使えないのはなんとも不自由だ(´Д`;)
がんばります
0755デフォルトの名無しさん
2005/04/25(月) 05:24:18今managedC++をやるべきか躊躇している。
0756デフォルトの名無しさん
2005/04/25(月) 08:43:22実装はMSしかやっていないわけで、当然、VisualStudio 2005 の出荷待ち
仕事で必要なんだったら、MC++をやる以外に選択肢はないんだが、勉強程度だったら
C++/CLIを押さえておく程度で問題はないんじゃないか
0757デフォルトの名無しさん
2005/05/07(土) 01:01:210758デフォルトの名無しさん
2005/05/07(土) 01:24:09文法を整えたのがC++/CLI
0759デフォルトの名無しさん
2005/05/07(土) 11:47:58public enum class Width : double
{
Undefine = 0.0
};
とすると、コンパイル・エラーが出る
おかしいなと思って調べてみたら、駄目じゃん、int 系の型しか背景型にならないとMSDNに
書いてあったorz
public struct PaperSize
{
double Width;
double Height;
};
public enum class Paper : PaperSize
{
Ax = { 1000.0, 2000.0 }
};
とかできると信じていたのに
0760デフォルトの名無しさん
2005/05/07(土) 15:26:330761デフォルトの名無しさん
2005/05/07(土) 16:31:000762デフォルトの名無しさん
2005/05/07(土) 17:53:13追加分があるだけ
0763デフォルトの名無しさん
2005/05/07(土) 18:03:220764デフォルトの名無しさん
2005/05/07(土) 18:37:30いや、MS から手に入る去年の6月版ドラフトには float, double も可能と書いてある
奴ら実装で手を抜きやがった
あ、いや、信じてるよ。正式リリース時にはちゃんと float や double も背景型に
指定できるって。__int64 まで対応しているから、エリア的には大丈夫なはずだし
0765デフォルトの名無しさん
2005/05/07(土) 20:20:02そりゃ、基本的な型だけでも参照型と値型の2種類。インターフェイスやデリゲート、属性も
増えてるんだから、文法にも手を入れないとキャストもできないだろ
0766デフォルトの名無しさん
2005/05/08(日) 18:09:550767デフォルトの名無しさん
2005/05/08(日) 22:10:30yes
ここで出てる C++/CLI の話は、全部 VS 2005 Beta での話
0768デフォルトの名無しさん
2005/05/08(日) 22:35:440769デフォルトの名無しさん
2005/05/10(火) 00:16:43こんな事書いてる
確かにその意見には同意するし、C++/CLIへの評価も判る
だが、なぜだろう。疫病神に取り憑かれたような気がするのは(w
0770デフォルトの名無しさん
2005/05/10(火) 16:49:060771デフォルトの名無しさん
2005/05/12(木) 16:09:53ttp://download.microsoft.com/download/9/9/c/99c65bcd-ac66-482e-8dc1-0e14cd1670cd/C++-CLI%20Standard.pdf
0772デフォルトの名無しさん
2005/05/24(火) 09:30:33C++のexportには対応してくれてるのかな?
0773デフォルトの名無しさん
2005/06/03(金) 17:34:04VS2005TSβ2、VC8で、共通言語ランタイムを有効にしてビルドした
ものを 実行しようとすると、必要なDLL が無いと怒られました。
手動で.NET Frameworkの該当するフォルダにパスを通せば動く
のですが、手でパス設定しなければならないものでしょうか?
(そんなこと無いと思うのですが)
今までネイティブしかやってないので、勝手がわかりません…
どなたかお願いします。
0774デフォルトの名無しさん
2005/06/03(金) 17:43:30printfなどのc/c++の関数使っているならいくら/CLRでコンパイルしても
呼び出されるDLLはネイティブのものだからパスが必要になる。
具体的にはどのDLLが無いと出たのか書かないと答えられんよ。
0775デフォルトの名無しさん
2005/06/03(金) 18:11:02返事ありがとう。
DLLはmsvcr80.dllでした(無記入スミマセン)
通したパスは
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215
です。
printfは使っています。
0776773&775
2005/06/03(金) 18:14:56くだんのプログラムですが、共通言語ランタイムを無効にして
ビルド&実行したときには特に問題は無いです。
このことは、ネイティブなDLLへのパスは通っているという
解釈になりませんか?
0777デフォルトの名無しさん
2005/06/03(金) 18:18:070778デフォルトの名無しさん
2005/06/03(金) 18:35:28実行すると同じエラーが出るはず。
cl /MD xxx.cpp
msvcr80.dllはマルチスレッド対応のランタイムルーチン。シングルスレッドモードの場合は不要。
/CLRの場合常にマルチスレッド対応であることが要求されるため暗黙に/MDが付加される。
VC++6.0用のものは、c:\windows\system32\msvcrt.dll にあるからパスは不要なのだ。
リリース版になったらインストール時にwindows\system32にコピーされるようなるのだと思う。
0779773
2005/06/03(金) 19:06:01元のプログラムがマルチスレッドプログラムなので /MT を使って
ビルドしています。 /MD 使ってビルドして実行したらハングするかも
(共通言語ランタイム無効の場合)
/CLRの時は、コード生成は/MDにしましたが(そうしないとコンパイルエラーが出る)、
それがdllが無いと言われる原因?
ちと混乱してきました。
1・/CLRをつける
2・/MT->/MDにする(共通言語ランタイムでは、MDでマルチスレッド対応なので問題なし)
3・msvcr80.dllが無いといわれる。
という流れですか? 結局回避するにはどうしたらいいのでしょう。
ちなみに、c:\windows\system32 の中には msvcr80d.dllだけありました。
msvcr80.dllを手でコピーしちゃえば問題なくなるのはわかりますが、
要はβ2では、msvcr80.dllを使うプログラムは、自分(VSの使い手)で
何とかせい、ということでしょうか?
0780デフォルトの名無しさん
2005/06/03(金) 19:30:52http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcconusing_atl_min_crtinyouratlproject.asp
http://hp.vector.co.jp/authors/VA022575/c/atlmincrt.html
http://home.att.ne.jp/banana/akatsuki/doc/atlwtl/atlwtl08-03/
http://www.hi-ho.ne.jp/babaq/comprog2.html
0781デフォルトの名無しさん
2005/06/03(金) 23:12:49いや、明示的に printf なんて使ってるからそれじゃ駄目だろう
>779
C ランタイム・ライブラリのBeta版をシステムに入れちゃいかんだろうさ
モジュールの横に置いたら?
0782デフォルトの名無しさん
2005/06/04(土) 00:21:47こちらのは前のバージョンなので違うのかもしれないが、
/clr のデフォルトは /MT になってるぞ。/MDは指定可能だが
/MLは不可になってる。/MTじゃエラーになるのかな?
/MT ならモジュールサイズはでかくなるがDLLは不要だ。
0783773
2005/06/04(土) 01:00:46msvcr80d.dll(デバッグ用?)のは知らない間にもう入ってました。
>>782
>/MTじゃエラーになるのかな?
β2だとコンパイルエラーになります。
0784773
2005/06/04(土) 01:24:33http://pc8.2ch.net/test/read.cgi/tech/1113305966/201-203
0785デフォルトの名無しさん
2005/06/04(土) 01:51:26サイドバイサイドか、いよいよWin2000は切捨てかのう。
0787デフォルトの名無しさん
2005/06/04(土) 20:27:42別に変わらんでしょ。COMのサイド×サイドがない振る舞いをするだけで
アセンブリのロードはCLRが管理するから、問題ないんじゃね?
0788デフォルトの名無しさん
2005/06/04(土) 21:06:110789773
2005/06/05(日) 06:30:55以下、勘違いでした。
>元のプログラムがマルチスレッドプログラムなので /MT を使って
>ビルドしています。 /MD 使ってビルドして実行したらハングするかも
/MLと勘違いしてた。 /MTを/MDにしてもハングする訳ないですね。
っていうか、VS2005って、/MLがなくなってるみたい。今気がついた…
スレ違いスミマセン
0790デフォルトの名無しさん
2005/06/05(日) 09:28:54DLL のロード順て、exe の位置が最優先でしょ
今まで通りサーチは PATH に従うだけで何か問題ある?
mfc の DLL とかと同じ扱いすればいいんじゃねぇの
0791デフォルトの名無しさん
2005/06/05(日) 14:47:380792デフォルトの名無しさん
2005/06/05(日) 15:53:27アホか
0793デフォルトの名無しさん
2005/06/05(日) 16:58:37MSDN の LoadLibrary には
1.アプリケーションのロード元ディレクトリ。
2.現在のディレクトリ。
3.Windows System ディレクトリ。32->16
4.Windows ディレクトリ。
5.PATH 環境変数にリストされたディレクトリ。
と、書かれているが違うの?
0794デフォルトの名無しさん
2005/06/05(日) 17:35:471)普通のDLLは >>793 のとおり、ただしWinXP以降Win32マニフェストで変更可能。
2)ActiveXのDLLはレジストリに登録されたパスからロードされる。Win32マニフェストで変更可能。
3)アセンブリのDLLはCLR管理で、少し端折るがGAC、codebase、exeの位置から相対パスで特定の
ルールで検索。codebaseはアセンブリマニフェストに相対パスで記録される。
(マニフェストも2種類あるのでアセンブリとWin32を接頭語として付けてみた。
マニュアル上の表記ではないがまったく別のものなので区別しないと混乱の元。)
managed c++, C++/CLIはすべてのDLLを使えるため1,2,3を意識しなきゃいかんということ。
msvcr80.dllは (1)なのでWin32マニフェストが機能しないWinXPより前のOSでは
>>793 のリストのどこかに配置しなければならない。
VS2005でコンパイルするとmsvcr80.dllはWin32マニフェストで指定されるため、XP以降は
Win32マニフェストをexeと同じ場所に置くか、Win32リソースとして埋め込むかすればよい。
まあこれじゃユーザーが混乱するのも仕方ないわな。
0795デフォルトの名無しさん
2005/06/05(日) 17:49:27だから、2kだと変わらんよね? msvc80.dll はネイティブだから exe の位置に置けば
特に変わらないよと逝っているんだが、なんで漏れが否定されているのかよく分からない(´・ω・`)
0796デフォルトの名無しさん
2005/06/05(日) 18:10:59> DLL のロード順て、exe の位置が最優先でしょ
のDLLの部分がmsvc80.dllを指しているのか、DLL一般のことを言ってるのか
区別がつきづらかったのだと思うが、>>792が脳髄反射で反応してるのは確かだ。
■ このスレッドは過去ログ倉庫に格納されています