おそらく、.NET開発でデファクトスタンダードに最も近いであろう
C++/CLIについて語ろうぜ!
このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。
.NETのクラスライブラリの使い方といった質問は Visual Studioスレにお願いします。
前スレッドはこちら
くだすれC++/CLI(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1142144110/l1
dat落ち姉妹スレ
C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/l1
http://pc11.2ch.net/test/read.cgi/tech/1142147319/l1
http://pc8.2ch.net/test/read.cgi/tech/1126450441/l1
managed C++ やろうぜ!! 002
http://pc8.2ch.net/test/read.cgi/tech/1139043535/l1
探検
くだすれC++/CLI(初心者用)part2
■ このスレッドは過去ログ倉庫に格納されています
2010/03/15(月) 09:41:19
269デフォルトの名無しさん
2011/05/16(月) 10:32:51.80 いや、次のバージョンでは復活させるって言ってる。
問題は「次」というのがSP2なのかVS2014とかになるのかが分からないこと。
問題は「次」というのがSP2なのかVS2014とかになるのかが分からないこと。
270デフォルトの名無しさん
2011/05/16(月) 10:37:08.05 その前にC++/CLI自体が…
今やMSにとってはATLでCOM触るラッパーを書くためだけの言語だからなあ
今やMSにとってはATLでCOM触るラッパーを書くためだけの言語だからなあ
271デフォルトの名無しさん
2011/05/24(火) 01:29:53.63 /*********************************/
/* __finallyブロックは何のために */
/*********************************/
try {
throw 128;
} catch (int num1) {
System::Console::WriteLine("catchブロック: num1 == {0}", num1);
} __finally {
System::Console::WriteLine("__finallyブロックって何の意味があるのか疑問だな");
}
System::Console::WriteLine("__finallyブロックがなくても、throwの有無にかかわらずここで実行できるじゃないか。");
/* __finallyブロックは何のために */
/*********************************/
try {
throw 128;
} catch (int num1) {
System::Console::WriteLine("catchブロック: num1 == {0}", num1);
} __finally {
System::Console::WriteLine("__finallyブロックって何の意味があるのか疑問だな");
}
System::Console::WriteLine("__finallyブロックがなくても、throwの有無にかかわらずここで実行できるじゃないか。");
272デフォルトの名無しさん
2011/05/24(火) 21:38:05.21 だがその処理の呼び出し元でcatchしたかった時はどうする?
C++なら自分で再throwする必要があるが、
finallyを使えばそういうことを考える必要がない。
ついでに言うと、finallyブロックは
例外が起きようとも起きなかろうとも、
breakやreturnで抜けても必ず実行されるので
ファイルの閉じ忘れなどを回避する実に有効な手段である。
C++なら自分で再throwする必要があるが、
finallyを使えばそういうことを考える必要がない。
ついでに言うと、finallyブロックは
例外が起きようとも起きなかろうとも、
breakやreturnで抜けても必ず実行されるので
ファイルの閉じ忘れなどを回避する実に有効な手段である。
273デフォルトの名無しさん
2011/05/24(火) 23:17:43.72 スタック割当構文じゃだめなの。
274デフォルトの名無しさん
2011/05/25(水) 23:31:46.12 >>273
だいたいそれで間に合うとは思う。
auto_handleやauto_gcrootの助けもあるしな。
まあ、今までのVisual C++にも__finallyあるし、C#にもfinallyあるし、
あえてC++/CLIに__finallyを搭載しない理由もないと言ったところでは?
だいたいそれで間に合うとは思う。
auto_handleやauto_gcrootの助けもあるしな。
まあ、今までのVisual C++にも__finallyあるし、C#にもfinallyあるし、
あえてC++/CLIに__finallyを搭載しない理由もないと言ったところでは?
275デフォルトの名無しさん
2011/05/26(木) 01:03:44.37 使ったオブジェクトのデストラクタ呼ぶだけでいいケースは確かに多いけどそうじゃないときもあるだろ
その場限りのちょっとした後処理のためにもいちいちクラス作るの?
その場限りのちょっとした後処理のためにもいちいちクラス作るの?
276デフォルトの名無しさん
2011/05/26(木) 05:07:03.51 超初心者です。
教えてほしいのですが、
hoge(int *piyo)は
hoge(int^ piyo)と
してるのですが
hoge(int **piyo)は
どのように書き換えれば良いのでしょうか
すいませんが教えてください
教えてほしいのですが、
hoge(int *piyo)は
hoge(int^ piyo)と
してるのですが
hoge(int **piyo)は
どのように書き換えれば良いのでしょうか
すいませんが教えてください
277デフォルトの名無しさん
2011/05/26(木) 12:12:03.85 array<int^>^ piyo とか?
278デフォルトの名無しさん
2011/05/26(木) 20:22:59.15 /* Hashtableのポインターへのポインターがコンパイルエラー */
using namespace System;
using namespace Collections;
const char *pc1;
const int nmax = 4;
// const char * の任意の要素数のデータを動的にメモリを割り当てて使う
const char **ppc1 = new const char *[nmax];
int n1 = 0;
*(ppc1 + n1++) = "higasi";
*(ppc1 + n1++) = "nisi";
*(ppc1 + n1++) = "minami";
*(ppc1 + n1++) = "kita";
for (n1 = 0; n1 < nmax; ++n1) {
pc1 = *(ppc1 + n1);
Console::WriteLine(gcnew String(pc1));
}
// 同様の手段で、Hashtable ^^ にメモリを動的に割り当てて任意の数
// のHashtable ^ を格納しようとするとコンパイルエラー
ArrayList ^pArrayList1 = gcnew ArrayList();
for (n1 = 0; n1 < nmax; ++n1) {
pArrayList1->Add(gcnew Hashtable());
}
Hashtable ^pHashtable1, ^pHashtable2;
Hashtable ^^ppHashtable1 = gcnew Hashtable ^[nmax]; // コンパイルエラー
ppHashtable1 = gcnew Hashtable ^[nmax];
for (n1 = 0; n1 < nmax; ++n1) {
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]);
// ^(ppHashtable1 + n1) = pHashtable1; // コンパイルエラー
// pHashtable2 = ^(ppHashtable1 + n1); // コンパイルエラー
pHashtable1 = pHashtable2 = nullptr;
}
using namespace System;
using namespace Collections;
const char *pc1;
const int nmax = 4;
// const char * の任意の要素数のデータを動的にメモリを割り当てて使う
const char **ppc1 = new const char *[nmax];
int n1 = 0;
*(ppc1 + n1++) = "higasi";
*(ppc1 + n1++) = "nisi";
*(ppc1 + n1++) = "minami";
*(ppc1 + n1++) = "kita";
for (n1 = 0; n1 < nmax; ++n1) {
pc1 = *(ppc1 + n1);
Console::WriteLine(gcnew String(pc1));
}
// 同様の手段で、Hashtable ^^ にメモリを動的に割り当てて任意の数
// のHashtable ^ を格納しようとするとコンパイルエラー
ArrayList ^pArrayList1 = gcnew ArrayList();
for (n1 = 0; n1 < nmax; ++n1) {
pArrayList1->Add(gcnew Hashtable());
}
Hashtable ^pHashtable1, ^pHashtable2;
Hashtable ^^ppHashtable1 = gcnew Hashtable ^[nmax]; // コンパイルエラー
ppHashtable1 = gcnew Hashtable ^[nmax];
for (n1 = 0; n1 < nmax; ++n1) {
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]);
// ^(ppHashtable1 + n1) = pHashtable1; // コンパイルエラー
// pHashtable2 = ^(ppHashtable1 + n1); // コンパイルエラー
pHashtable1 = pHashtable2 = nullptr;
}
279デフォルトの名無しさん
2011/05/26(木) 20:26:26.71 このコンパイルエラーになる
System::Collections::Hashtable ^^ppHashtable1;
って何とかならんかいな。多重ループで毎回dynamic_cast演算子使ってる
と効率悪いだろうし。
System::Collections::Hashtable ^^ppHashtable1;
って何とかならんかいな。多重ループで毎回dynamic_cast演算子使ってる
と効率悪いだろうし。
280デフォルトの名無しさん
2011/05/26(木) 20:45:23.45 delete [] ppc1; を忘れとった。
それと、ppHashtable1 = gcnew Hashtable ^[nmax];
の行も 「// コンパイルエラー」を忘れ取った。
それと、ppHashtable1 = gcnew Hashtable ^[nmax];
の行も 「// コンパイルエラー」を忘れ取った。
281デフォルトの名無しさん
2011/05/27(金) 01:02:41.42 なんていうか、C++ のことは忘れた方が良いよ
282デフォルトの名無しさん
2011/05/27(金) 03:30:26.71 /* cli::array を使ってもコンパイルエラーかいな、難しいもんだな */
cli::array<Hashtable^> ^ppHashtable1 = gcnew cli::array<Hashtable ^>[nmax];
IEnumerator ^pIEnumerator1;
pArrayList1->GetEnumerator();
while (pIEnumerator1->MoveNext()) {
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]);
^(ppHashtable1 + n1) = pHashtable1;
pHashtable2 = ^(ppHashtable1 + n1);
pHashtable1 = pHashtable2 = nullptr;
}
pIEnumerator1 = nullptr;
cli::array<Hashtable^> ^ppHashtable1 = gcnew cli::array<Hashtable ^>[nmax];
IEnumerator ^pIEnumerator1;
pArrayList1->GetEnumerator();
while (pIEnumerator1->MoveNext()) {
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]);
^(ppHashtable1 + n1) = pHashtable1;
pHashtable2 = ^(ppHashtable1 + n1);
pHashtable1 = pHashtable2 = nullptr;
}
pIEnumerator1 = nullptr;
283デフォルトの名無しさん
2011/05/27(金) 03:33:53.23 間違えた
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]);
の行は間違いで正しくは
pHashtable1 = dynamic_cast<Hashtable ^>(pIEnumerator1->Current);
だった。
pHashtable1 = dynamic_cast<Hashtable ^>(pArrayList1[n1]);
の行は間違いで正しくは
pHashtable1 = dynamic_cast<Hashtable ^>(pIEnumerator1->Current);
だった。
284デフォルトの名無しさん
2011/05/27(金) 04:48:38.33 using namespace System;
using namespace Collections;
typedef Hashtable^ pHashtable;
pHashtable pHashtable1 = gcnew Hashtable();
pHashtable pHashtable2 = gcnew Hashtable();
pHashtable pHashtable3 = gcnew Hashtable();
pHashtable *ppHashtable1;
ppHashtable1 = &pHashtable1; // 可能
ppHashtable1 = nullptr;
// ppHashtable1 = new pHashtable; // コンパイルエラー
// delete ppHashtable1;
// ppHashtable1 = nullptr;
// const int nmax = 3;
// ppHashtable1 = new pHashtable[nmax];
// delete [] ppHashtable1;
new演算子が使えないならSTLのvectorなら何とかなるんだろうか。
でも、.NET Framework 2.0 SDKをダウンロードしたものでは標準ライブラリの
ヘッダーファイルを#includeできないからアンマネージは使えない。
using namespace Collections;
typedef Hashtable^ pHashtable;
pHashtable pHashtable1 = gcnew Hashtable();
pHashtable pHashtable2 = gcnew Hashtable();
pHashtable pHashtable3 = gcnew Hashtable();
pHashtable *ppHashtable1;
ppHashtable1 = &pHashtable1; // 可能
ppHashtable1 = nullptr;
// ppHashtable1 = new pHashtable; // コンパイルエラー
// delete ppHashtable1;
// ppHashtable1 = nullptr;
// const int nmax = 3;
// ppHashtable1 = new pHashtable[nmax];
// delete [] ppHashtable1;
new演算子が使えないならSTLのvectorなら何とかなるんだろうか。
でも、.NET Framework 2.0 SDKをダウンロードしたものでは標準ライブラリの
ヘッダーファイルを#includeできないからアンマネージは使えない。
285276
2011/05/27(金) 05:15:05.02 中途半端な質問をしてすいませんでした。
>>277さんレスありがとうございました。
実はDirectXのBaseClassesをCLIで書いてるのですが
GetSyncSource( [Out]IReferenceClock** pClock) ;
(IReferenceClockはmanagedインターフェイスです)
の部分をどう書けば良いかわからないです。
interior_ptrというのを使えと出てきますが、使い方がよくわかりません。
どう書けば良いか、どなたかご教示ください。
>>277さんレスありがとうございました。
実はDirectXのBaseClassesをCLIで書いてるのですが
GetSyncSource( [Out]IReferenceClock** pClock) ;
(IReferenceClockはmanagedインターフェイスです)
の部分をどう書けば良いかわからないです。
interior_ptrというのを使えと出てきますが、使い方がよくわかりません。
どう書けば良いか、どなたかご教示ください。
286デフォルトの名無しさん
2011/05/27(金) 05:52:09.46 静的配列も作成できないのか。これもエラーになるのか。
typedef System::Collections::Hashtable ^pHashtable;
pHashtable pHashtable_hairetu[8];
マネージなクラスというのはどうしようもないな、困ったもんだ。
typedef System::Collections::Hashtable ^pHashtable;
pHashtable pHashtable_hairetu[8];
マネージなクラスというのはどうしようもないな、困ったもんだ。
287デフォルトの名無しさん
2011/05/27(金) 06:13:49.43 これもエラーになるのか。
やっぱりArrayListのままで甘んじるしかないようだな。
typedef System::Collections::Hashtable ^pHashtable;
pHashtable *pHashtable1 = new pHashtable();
char *pc1 = reinterpret_cast<char *>(&pHashtable1);
pc1 = reinterpret_cast<char *>(&pHashtable1);
pHashtable pHashtable2 = *(reinterpret_cast<pHashtable *>(pc1));
CLIってぼろいな。
やっぱりArrayListのままで甘んじるしかないようだな。
typedef System::Collections::Hashtable ^pHashtable;
pHashtable *pHashtable1 = new pHashtable();
char *pc1 = reinterpret_cast<char *>(&pHashtable1);
pc1 = reinterpret_cast<char *>(&pHashtable1);
pHashtable pHashtable2 = *(reinterpret_cast<pHashtable *>(pc1));
CLIってぼろいな。
288デフォルトの名無しさん
2011/05/27(金) 23:37:00.98 マネージドクラスをネイティブクラスでラップしてから配列に入れるとか・・
C++/CLIは異なる言語が同居する2世代住宅言語だからなぁ。
#include <msclr/auto_gcroot.h>
using namespace msclr;
using namespace System;
ref struct Foo {
void Say() { Console::WriteLine("Hello World !"); }
};
struct Bar {
auto_gcroot<Foo^> foo;
Bar() : foo(gcnew Foo()) {}
};
int main(array<String^>^ args) {
Bar bs[] = { Bar(), Bar(), Bar() };
for (int i=0; i<3; i++) bs[i].foo->Say();
}
C++/CLIは異なる言語が同居する2世代住宅言語だからなぁ。
#include <msclr/auto_gcroot.h>
using namespace msclr;
using namespace System;
ref struct Foo {
void Say() { Console::WriteLine("Hello World !"); }
};
struct Bar {
auto_gcroot<Foo^> foo;
Bar() : foo(gcnew Foo()) {}
};
int main(array<String^>^ args) {
Bar bs[] = { Bar(), Bar(), Bar() };
for (int i=0; i<3; i++) bs[i].foo->Say();
}
289デフォルトの名無しさん
2011/05/28(土) 06:57:48.67 もうちょっと改良
#include <msclr/auto_gcroot.h>
using namespace msclr;
using namespace System;
ref struct Foo {
void Say() { Console::WriteLine("Hello World !"); }
Foo() { Console::WriteLine("Foo Created"); }
~Foo() { Console::WriteLine("Foo Deleted"); }
};
typedef auto_gcroot<Foo^> foo;
int main(array<String^>^ args) {
foo ag[] = { gcnew Foo(), gcnew Foo(), gcnew Foo() };
for (int i=0; i<3; i++) ag[i]->Say();
}
#include <msclr/auto_gcroot.h>
using namespace msclr;
using namespace System;
ref struct Foo {
void Say() { Console::WriteLine("Hello World !"); }
Foo() { Console::WriteLine("Foo Created"); }
~Foo() { Console::WriteLine("Foo Deleted"); }
};
typedef auto_gcroot<Foo^> foo;
int main(array<String^>^ args) {
foo ag[] = { gcnew Foo(), gcnew Foo(), gcnew Foo() };
for (int i=0; i<3; i++) ag[i]->Say();
}
290276
2011/05/28(土) 08:14:55.34 すいませんが再度質問さしていただきます
C++で
class Foo{
--色々なメソッドやメンバ--
}
である別のクラスのメソッドで
void Piyo(Foo **hoge);というのがあり
渡す値がFoo* fooとして
Piyo(&foo);とするとします。
これをCLIで実現するにはどのようにすればよいでしょうか
どなたかご教示ください。
C++で
class Foo{
--色々なメソッドやメンバ--
}
である別のクラスのメソッドで
void Piyo(Foo **hoge);というのがあり
渡す値がFoo* fooとして
Piyo(&foo);とするとします。
これをCLIで実現するにはどのようにすればよいでしょうか
どなたかご教示ください。
291デフォルトの名無しさん
2011/05/29(日) 00:06:15.74 質問の意図が良く分からないけど、こんな感じの回答でいい?
using namespace System;
ref class Foo {};
void Piyo(Foo^ %hoge) {
hoge = gcnew Foo();
}
int main(){
Foo^ f = nullptr;
Piyo(f);
Console::WriteLine(f);
Foo f2;
Piyo(%f2);
Console::WriteLine(%f2);
}
using namespace System;
ref class Foo {};
void Piyo(Foo^ %hoge) {
hoge = gcnew Foo();
}
int main(){
Foo^ f = nullptr;
Piyo(f);
Console::WriteLine(f);
Foo f2;
Piyo(%f2);
Console::WriteLine(%f2);
}
292デフォルトの名無しさん
2011/05/30(月) 12:26:48.80 .NET的には単にreturnで返すのが普通
どうしても参照渡しでやりたいなら
void Piyo([System::Runtime::InteropServices::OutAttribute]Foo^ %hoge)
こう書くのが.NET的には正解
クラスライブラリ作ってるんでなければ好きにすればいいけど
どうしても参照渡しでやりたいなら
void Piyo([System::Runtime::InteropServices::OutAttribute]Foo^ %hoge)
こう書くのが.NET的には正解
クラスライブラリ作ってるんでなければ好きにすればいいけど
293276
2011/06/01(水) 06:53:05.38 ありがとうございました。
たいへん参考になりました。
たいへん参考になりました。
294デフォルトの名無しさん
2011/06/01(水) 07:08:44.99 教えてほしいんですが。
C,C++なら
typedef union
{
int a;
short b;
double d;
}Union;
としたらUnionのサイズはsizeof(double)で
Union u = 1;としたら、aに1が入ると思うんですが。
CLIで
[StructLayout(LayoutKind::Explicit)]
ref struct Union
{
[FieldOffset(?)]int a;
[FieldOffset(?)]short b;
[FieldOffset(?)]double d;
};
と宣言したとして、?の部分には何の数値を入れればよいのでしょうか。
ヘルプを見ると「フィールドの物理的な位置を示します。」
と書かれているのですが、馬鹿なんでわかりません。
どなたか教えてください。
C,C++なら
typedef union
{
int a;
short b;
double d;
}Union;
としたらUnionのサイズはsizeof(double)で
Union u = 1;としたら、aに1が入ると思うんですが。
CLIで
[StructLayout(LayoutKind::Explicit)]
ref struct Union
{
[FieldOffset(?)]int a;
[FieldOffset(?)]short b;
[FieldOffset(?)]double d;
};
と宣言したとして、?の部分には何の数値を入れればよいのでしょうか。
ヘルプを見ると「フィールドの物理的な位置を示します。」
と書かれているのですが、馬鹿なんでわかりません。
どなたか教えてください。
295デフォルトの名無しさん
2011/06/01(水) 21:57:49.20 C++/CLIにおけるジェネリックメソッドとテンプレート関数の違いを説明してくださいお願いします
296デフォルトの名無しさん
2011/06/03(金) 21:20:40.48297デフォルトの名無しさん
2011/06/04(土) 14:38:11.46 DirextXXinputのXInputGetState関数実行の格納先構造体
struct CONTROLER_STATE
{
XINPUT_STATE lastState;
XINPUT_STATE state;
DWORD dwResult;
bool bLockVibration;
XINPUT_VIBRATION vibration;
};
をC#で受け取れるようにするにはどうすればいいんですか?
ラップというのはどういう流れになるんですか?C++/CLIの本2冊読んだんですが解説コードからちょっとでも違うと全くわからないです
今のところの認識は、
structをそのままrefクラスに入れる>エラー大量
structの前にrefをつける>エラー大量
structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む>これなら当然できる
ラップするとはどういうことなんでしょうか
struct CONTROLER_STATE
{
XINPUT_STATE lastState;
XINPUT_STATE state;
DWORD dwResult;
bool bLockVibration;
XINPUT_VIBRATION vibration;
};
をC#で受け取れるようにするにはどうすればいいんですか?
ラップというのはどういう流れになるんですか?C++/CLIの本2冊読んだんですが解説コードからちょっとでも違うと全くわからないです
今のところの認識は、
structをそのままrefクラスに入れる>エラー大量
structの前にrefをつける>エラー大量
structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む>これなら当然できる
ラップするとはどういうことなんでしょうか
298デフォルトの名無しさん
2011/06/04(土) 15:04:33.10 本二冊読んでvalue classが出てこないってありえるのか…?
299デフォルトの名無しさん
2011/06/04(土) 15:58:05.32 どういうことですか?structの前にvalueをつけたら混合型はサポートされていませんというエラーがでます
300デフォルトの名無しさん
2011/06/04(土) 17:21:15.05 そりゃ、ref や value をつけたら C++/CLI の管理だからな
通常の C++ のポインタとか持ってちゃ、混合型になるだろ
通常の C++ のポインタとか持ってちゃ、混合型になるだろ
301デフォルトの名無しさん
2011/06/04(土) 17:47:19.16302デフォルトの名無しさん
2011/06/04(土) 18:50:06.15 まじですか・・・
何かものすごい事を期待していました・・・
何かものすごい事を期待していました・・・
303デフォルトの名無しさん
2011/06/04(土) 19:05:39.17 ってC++CLI使わなくても直接C#からXinput呼べるんですか?
どうやるんですか?
どうやるんですか?
304デフォルトの名無しさん
2011/06/04(土) 19:19:52.39 PInvoke で渡す構造体はC#側で用意してあげればいい
305デフォルトの名無しさん
2011/06/04(土) 20:30:56.92 ありがとうございます
意味が全く分かりませんがPInvokeを調べてみます
意味が全く分かりませんがPInvokeを調べてみます
306デフォルトの名無しさん
2011/06/04(土) 20:31:25.24 XInputだったらXNA使えよ
308294
2011/06/07(火) 07:00:08.28 再度質問さしていただきます
struct Hoge
{
union
{
DWORD dwGBitMask;
DWORD dwUBitMask;
DWORD dwZBitMask;
DWORD dwBumpDvBitMask;
struct
{
WORD wFlipMSTypes;
WORD wBltMSTypes;
} MultiSampleCaps;
};
を
ref struct Hoge
{
[StructLayout(LayoutKind::Explicit)]
ref struct Union
{
[FieldOffset(0)]DWORD dwGBitMask;
[FieldOffset(0)]DWORD dwUBitMask;
[FieldOffset(0)]DWORD dwZBitMask;
[FieldOffset(0)]DWORD dwBumpDvBitMask;
とまでしたのですが、
struct MultiSampleCaps
{
WORD wFlipMSTypes;
WORD wBltMSTypes;
}
の部分はどのように書けば良いのでしょうか、すいませんが教えてください。
struct Hoge
{
union
{
DWORD dwGBitMask;
DWORD dwUBitMask;
DWORD dwZBitMask;
DWORD dwBumpDvBitMask;
struct
{
WORD wFlipMSTypes;
WORD wBltMSTypes;
} MultiSampleCaps;
};
を
ref struct Hoge
{
[StructLayout(LayoutKind::Explicit)]
ref struct Union
{
[FieldOffset(0)]DWORD dwGBitMask;
[FieldOffset(0)]DWORD dwUBitMask;
[FieldOffset(0)]DWORD dwZBitMask;
[FieldOffset(0)]DWORD dwBumpDvBitMask;
とまでしたのですが、
struct MultiSampleCaps
{
WORD wFlipMSTypes;
WORD wBltMSTypes;
}
の部分はどのように書けば良いのでしょうか、すいませんが教えてください。
309デフォルトの名無しさん
2011/06/07(火) 13:08:48.20 C++/CLIでわざわざマネージ型をP/Invokeに使う意味がわからん。
しかもよりによってなぜ今時DirectDrawなのか。
[StructLayout(LayoutKind::Sequential)]struct MultiSampleCaps { ここは同じでオフセットも不要 }
/*Hogeの中*/[FieldOffset(4)]MultiSampleCaps MultiSampleCaps;
.NET関連で調べ物するときのキーワードはC++/CLIじゃなくてC#ね。
情報量1000倍だから。アホらしいと思ったらC#へどうぞ。
しかもよりによってなぜ今時DirectDrawなのか。
[StructLayout(LayoutKind::Sequential)]struct MultiSampleCaps { ここは同じでオフセットも不要 }
/*Hogeの中*/[FieldOffset(4)]MultiSampleCaps MultiSampleCaps;
.NET関連で調べ物するときのキーワードはC++/CLIじゃなくてC#ね。
情報量1000倍だから。アホらしいと思ったらC#へどうぞ。
310デフォルトの名無しさん
2011/06/08(水) 20:55:56.86 VC++6.0のMFCなプログラムとVC++2008 Express Edition の.NETなプログラムで
プロセス間通信したいのですがどうすればいいですか。
プロセス間通信したいのですがどうすればいいですか。
311デフォルトの名無しさん
2011/06/08(水) 22:03:55.29 WM_COPYDATAとか手軽でいいんじゃないか
312デフォルトの名無しさん
2011/06/08(水) 22:35:11.37 もしくは共有メモリ。DDEでも動くぜ。
313デフォルトの名無しさん
2011/06/22(水) 01:29:30.29 Graphicsをつかって1ドット書きたいのですが方法在りますか?
g->DarwLineだと2ドット最小?
g->DarwLineだと2ドット最小?
314デフォルトの名無しさん
2011/06/22(水) 06:08:56.94 FillRectangle
315デフォルトの名無しさん
2011/06/22(水) 11:33:33.87 g->FillRectangle(Brushes::White, 0, 0, 1, 1);
できた!
これからc++/cliするのとc#するのどっちがいいですか?
GPGPU & direct Xやるとしたらc++の方向のほうがいい?
できた!
これからc++/cliするのとc#するのどっちがいいですか?
GPGPU & direct Xやるとしたらc++の方向のほうがいい?
316デフォルトの名無しさん
2011/06/22(水) 11:48:19.12 C++かC#の2択、C++/CLIは無い
317デフォルトの名無しさん
2011/06/22(水) 12:42:08.36 ありがと、c++でいく
318デフォルトの名無しさん
2011/06/22(水) 13:44:22.22 GPGPUやDirectXならC++のみじゃね?
C#だとラッパー使うことになるし
まぁ、C++/CLIだけは無いけど
C#だとラッパー使うことになるし
まぁ、C++/CLIだけは無いけど
319デフォルトの名無しさん
2011/06/23(木) 10:09:33.25 C++/CLIを使おうとした初心者を思いとどまらせるスレになってるな
320デフォルトの名無しさん
2011/06/23(木) 10:20:17.40 進む先が地獄であることを知らない奴を追い返してやるのは当然だろう
321デフォルトの名無しさん
2011/06/23(木) 10:50:11.25 何も知らないでVisualC++使ってWindowsアプリを作ろうと思うと、
自動的にC++/CLIになるからなー
MSは鬼や
自動的にC++/CLIになるからなー
MSは鬼や
322デフォルトの名無しさん
2011/06/24(金) 00:13:45.93 .NET FrameworkとC++を知ってればどうって事無い
323デフォルトの名無しさん
2011/06/24(金) 00:20:14.62 333
324デフォルトの名無しさん
2011/06/24(金) 06:58:51.76 C++だけよりは、UI作るのは楽。
325デフォルトの名無しさん
2011/06/24(金) 14:45:59.69 C++だとUI作り辛いし、C#だとネイティブじゃないから、
C++/CLIを使えば良いんじゃね?
C++/CLIを使えば良いんじゃね?
326デフォルトの名無しさん
2011/06/24(金) 14:52:10.85 こうしてC++/CLIを勘違いした犠牲がまたひとり・・・
327325
2011/06/24(金) 15:04:02.96 と、思っていた時期が俺にもありましたってだけ
MSは頑張って理想通り完成させてくれよう
むしろ諦めたっぽいがw
MSは頑張って理想通り完成させてくれよう
むしろ諦めたっぽいがw
328デフォルトの名無しさん
2011/06/24(金) 23:04:13.78 正直、むしろ起動速度や処理の即応性とかの GUI こそ C++ でやって、ロジックとかに
.net fw を使うための言語だと思うんだが
.net fw を使うための言語だと思うんだが
329デフォルトの名無しさん
2011/06/26(日) 11:43:42.77 C++とC#を使いこなしたうえで両方を使うために
C++/CLIというならいいけど、両者の利点を
生かすためにいきなりこれ、というのは無理w
C++/CLIというならいいけど、両者の利点を
生かすためにいきなりこれ、というのは無理w
330デフォルトの名無しさん
2011/06/27(月) 09:26:00.43 >>328
起動速度や応答性を気にしないなら、C#で十分ってことだな
起動速度や応答性を気にしないなら、C#で十分ってことだな
331デフォルトの名無しさん
2011/06/27(月) 10:22:03.55 いや起動速度はC#と変わらないよ
ネイティブのDLLを読み込む分遅くなることはあっても速くなることはない
それからアンマネージコードとマネージコードの境界を越えるオーバーヘッドは馬鹿にならないので
下手するとマネージコードだけの方が速い
ネイティブのDLLを読み込む分遅くなることはあっても速くなることはない
それからアンマネージコードとマネージコードの境界を越えるオーバーヘッドは馬鹿にならないので
下手するとマネージコードだけの方が速い
332デフォルトの名無しさん
2011/06/27(月) 10:36:48.76 さらにC++/CLIの存在価値が下がったw
本当にラッパー専用言語だな
本当にラッパー専用言語だな
333デフォルトの名無しさん
2011/06/27(月) 12:13:07.27 C++にGCを入れろと言う要望への、一つの回答。
D言語も悪いところも見えてくる。
D言語も悪いところも見えてくる。
334デフォルトの名無しさん
2011/06/27(月) 15:06:24.73 ラッパーなら別にネイティブでいいんだよなぁ
335デフォルトの名無しさん
2011/06/27(月) 17:47:56.62 C++/CLIがなかったら
どうやってラップするの?
どうやってラップするの?
336デフォルトの名無しさん
2011/06/27(月) 18:01:37.46 C#-->C++は簡単だけど、逆は面倒。
337デフォルトの名無しさん
2011/06/27(月) 18:03:44.31 別にスタティックライブラリだろうがC++ライブラリだろうが
なんでもかんでもDLLに包んでP/Invokeでおk
ObjCコンパイラ以上の荒業でラッパーコードが書けるのがC++/CLIの醍醐味だけど
なんか、こう、便利とは違うんだよなあ…
なんでもかんでもDLLに包んでP/Invokeでおk
ObjCコンパイラ以上の荒業でラッパーコードが書けるのがC++/CLIの醍醐味だけど
なんか、こう、便利とは違うんだよなあ…
338デフォルトの名無しさん
2011/06/27(月) 18:05:53.91 マネージドで、ポインタを使いまくれる。
339デフォルトの名無しさん
2011/06/27(月) 19:58:57.49 C#でできなくてC++/CLIでなら可能なポインタ関係の操作ってあったっけ?
C#のunsafeの方が簡潔にCっぽく書けて扱いやすい気がするんだが
C#のunsafeの方が簡潔にCっぽく書けて扱いやすい気がするんだが
340デフォルトの名無しさん
2011/06/28(火) 09:14:21.36 C#はMarshal派
C++のUIだけC++/CLIやC#みたいに自動で作ってくれるC++は無い物か
BCBなら出来るけどさ
C++のUIだけC++/CLIやC#みたいに自動で作ってくれるC++は無い物か
BCBなら出来るけどさ
341デフォルトの名無しさん
2011/06/28(火) 21:35:58.12 BCBでやれば万事解決
342デフォルトの名無しさん
2011/06/29(水) 14:14:27.30 MSからBCB出してくんねーかな
C++/CLIは無かったことにして、買収しちゃえばそれで済むのに
C++/CLIは無かったことにして、買収しちゃえばそれで済むのに
343デフォルトの名無しさん
2011/06/29(水) 23:59:08.75 だからC++/CLIは「WinFormsが使えるC++」なんて生易しいものじゃないと何度言えば
344デフォルトの名無しさん
2011/06/30(木) 07:08:43.64 Windowsは、C++でプログラミングが基本。
345デフォルトの名無しさん
2011/06/30(木) 08:58:03.95 なぜC++は易しいのにC++/CLIは易しくないのか?
みたいな無神経な言い回しが何度も言われていた時期があった。
聞くほうも同じくらい無神経だから何度言っても通じないことは容易に想像できる。
みたいな無神経な言い回しが何度も言われていた時期があった。
聞くほうも同じくらい無神経だから何度言っても通じないことは容易に想像できる。
346デフォルトの名無しさん
2011/06/30(木) 09:30:47.84 まあネイティブのC++でGUI作るよりはずっと簡単だけど
C++/CLIでWinForms使うなっていうのは
どうせC#わからないと使えないしC++の経験があってもC#覚えたほうが早いからC#やれってこと
C++の経験があるからC++/CLIがいいだろうと思って始めた初心者が
C#のTIPSサイトですぐ出てくるようなコントロールの使い方を質問してくるとそりゃC#やれと言いたくなる
C++/CLIでWinForms使うなっていうのは
どうせC#わからないと使えないしC++の経験があってもC#覚えたほうが早いからC#やれってこと
C++の経験があるからC++/CLIがいいだろうと思って始めた初心者が
C#のTIPSサイトですぐ出てくるようなコントロールの使い方を質問してくるとそりゃC#やれと言いたくなる
347デフォルトの名無しさん
2011/06/30(木) 09:58:07.10348デフォルトの名無しさん
2011/06/30(木) 16:10:30.57 せめてVB並みのインテリセンスを実装してくれ
349デフォルトの名無しさん
2011/06/30(木) 16:29:27.88 2010にインテリセンスのらないの確定か
vNextも最初のバージョンは載らないらしいし
vNextも最初のバージョンは載らないらしいし
350デフォルトの名無しさん
2011/06/30(木) 23:34:53.54 GUIでUI設計ができてネイティブコードその上爆速コンパイル
Borland時代のDelphiはまさに神言語だったんだなぁと思う
Borland時代のDelphiはまさに神言語だったんだなぁと思う
351デフォルトの名無しさん
2011/07/01(金) 00:31:39.48 C#がネイティブコード吐く言語だったとしてもコンパイルは爆速のはずだよ
C++の言語仕様が糞なだけ
C++の言語仕様が糞なだけ
352デフォルトの名無しさん
2011/07/01(金) 00:57:16.04 Scalaはコンパイル遅いけど糞なのか?
353デフォルトの名無しさん
2011/07/01(金) 09:30:18.33 C#も多次元配列とか使わなければ速いよ
354デフォルトの名無しさん
2011/07/01(金) 09:37:09.00 Cが速いのは、安全性と裏腹。
355デフォルトの名無しさん
2011/07/01(金) 09:53:59.45 Cでも安全性は確保可能
356デフォルトの名無しさん
2011/07/01(金) 17:08:23.75 理屈では可能でも
現実の大部分のプログラムはそうなってないんだけど
現実の大部分のプログラムはそうなってないんだけど
357デフォルトの名無しさん
2011/07/01(金) 20:01:09.19 そうか?
それだと原発事故と飛行機事故と自動車事故と比べて騒いでる連中と同じだぞ
それだと原発事故と飛行機事故と自動車事故と比べて騒いでる連中と同じだぞ
358デフォルトの名無しさん
2011/07/01(金) 21:01:16.07 Cは標準ライブラリが安全性を確保するのが難しい作りになってるだけで、
使うライブラリによっては安全に書ける、気がする
使うライブラリによっては安全に書ける、気がする
359デフォルトの名無しさん
2011/07/01(金) 21:35:52.26 セキュリティは別にして、.NETはメモリ破壊が起きないのがいい
お前はもう死んでいる的なバグがずっと少ない
お前はもう死んでいる的なバグがずっと少ない
360デフォルトの名無しさん
2011/07/01(金) 22:42:12.30 ガベコレは、理論武装とかしなくても安全性が明らかだから好感を持てるんだが、
逆に言うとガベコレ使わなくても明らかに安全な部分はCで書いていい
逆に言うとガベコレ使わなくても明らかに安全な部分はCで書いていい
361デフォルトの名無しさん
2011/07/05(火) 10:04:29.39 C++/CLIはやれば出来る子
計算部分はネイティブで書いて、GUIや描画部分は.NETにやらせることで
高速かつ生産性の高いプログラミングが出来る
・・・と、言う夢だったのさ
計算部分はネイティブで書いて、GUIや描画部分は.NETにやらせることで
高速かつ生産性の高いプログラミングが出来る
・・・と、言う夢だったのさ
362大天使 ◆uL5esZLBSE
2011/07/05(火) 13:17:03.75 >>357
Cは安全性を捨てて速度得てんだよ バカか?
Cに安全性を追加したら
それは劣化C#になるから、下手に自分でかいた甘いコードで安全性をはかるよりも
C#でやるべき
お前はなんか、C++上で劣化C#作って喜んでそうなバカだな
Cは安全性を捨てて速度得てんだよ バカか?
Cに安全性を追加したら
それは劣化C#になるから、下手に自分でかいた甘いコードで安全性をはかるよりも
C#でやるべき
お前はなんか、C++上で劣化C#作って喜んでそうなバカだな
363デフォルトの名無しさん
2011/07/05(火) 15:20:27.62 自演乙
364デフォルトの名無しさん
2011/08/17(水) 15:46:40.55 VS2010で作っちゃったんだけど、VS2008に変換することって出来ます?
インテリセンス無いから入力がめんどくさい・・・
インテリセンス無いから入力がめんどくさい・・・
365デフォルトの名無しさん
2011/08/17(水) 21:56:13.11 無理
一応注意しとくと2008でコンパイルした混在アセンブリは.NET4でロードできなくなるよ?
一応注意しとくと2008でコンパイルした混在アセンブリは.NET4でロードできなくなるよ?
366デフォルトの名無しさん
2011/08/17(水) 22:07:00.37 あとはアドイン購入か。
http://www.wholetomato.com/default.asp
http://www.wholetomato.com/default.asp
367デフォルトの名無しさん
2011/08/17(水) 23:11:17.61 新規プロジェクトにコードだけ引っ越した方が簡単な気がするけど
368デフォルトの名無しさん
2011/08/18(木) 15:44:09.37 俺もそう思う
projファイル書き替えでなんとかなるけどね
混在はapp.config無理やりつけてやるとか
projファイル書き替えでなんとかなるけどね
混在はapp.config無理やりつけてやるとか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- キ...キャ...キャ...キャン...
- (´・ω・`)おはよ
- お前ら「鬱は温泉で治る」「焼肉食べ放題で治る」「猫耳ロリ女体化で治る」「日光浴で治る」←これ
- 【悲報】女さん「ハローワークで仕事を探してる3-40代の中年男性いるでしょ。あれ何?」 [483447288]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】維新の政治資金でガールズバー、高市首相「良いか悪いかは国民の皆さまが判断されること」 [115996789]
