◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

くだすれC++/CLI(初心者用)part2YouTube動画>1本 ->画像>4枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1268613679/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1./1256645713/662
2010/03/15(月) 09:41:19
おそらく、.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
2./1256645713/662
2010/03/15(月) 09:45:45
ドキュメントの MSDN には、System::String(SByte*); て書いてあるけども、
System::String(char*); が正解ってことか?

それとも SByte が signed char ではなくて char てこと?それは無いような気が。

ちなみに、使ってる教科書のサンプルプログラムは8bitでは char* 配列を渡してる。
3デフォルトの名無しさん
2010/03/17(水) 19:44:10
厳密名の付け方が分かりません
検索しても意味不明なものしか引っかからない
4デフォルトの名無しさん
2010/03/17(水) 21:02:17
開発でつかわれてるのかな?
C++/CLIって。
5デフォルトの名無しさん
2010/03/17(水) 21:41:39
必要なら使われるだろ。
だからなんなんだ?
6デフォルトの名無しさん
2010/03/17(水) 22:37:29
>>3
LINKにある。
/KEYCONTAINER /KEYFILE
7デフォルトの名無しさん
2010/03/17(水) 22:45:13
というか必要な時だけ最小限使うもの
基本的に使わないほうがいい
8デフォルトの名無しさん
2010/03/18(木) 00:33:17
最近妙にお気に入り
9デフォルトの名無しさん
2010/03/18(木) 09:03:31
Managed C++でさえ一部で使われていた。
10デフォルトの名無しさん
2010/03/22(月) 19:23:41
フォームの中にあるテキストボックスの内容をmainとか関数とかから書き換えたいんだけど
どんな方法があるでしょうか?
今までは強引にチェックボックスにチェックが入ると
void test(System::Windows::Forms::TextBox^ tb_log_view);
こんな感じの関数呼び出してTextBoxを強引にわたして指定の処理して
テキストボックスにメッセージ表示させてたんだけど
何せ使い勝手が悪いので・・・
11デフォルトの名無しさん
2010/03/25(木) 01:29:18
String^使えばいいんちゃう?
12デフォルトの名無しさん
2010/03/25(木) 18:00:01
今、「Cで書かれたライブラリをC++/CLIでラッピング(DLL化)し、
C#で使おう」という目的に向けて、Cのライブラリをラッピング中ですなのですが、構造体で悩んでます。
C++/CLI側でC#側に「構造体の配列」を返す関数が見せてるのですが、実行すると思ったように動きません。

C++/CLI側
[宣言]
public ref struct SampleStruct {
  static CHAR cUpdate;
};
static array<SampleStruct^>^ pstSample = gcnew array<SampleStruct^>(10);

関数
array<SampleStruct^>^ hogehoge(){
  if(pstSample[0] == nullptr ){
    for(int i=0; i<10; i++ ){
      pstSample[i] = gcnew (SampleStruct);
    }
  }
  pstSample[2]->cUpdate = 2;
  return pstSample;
}

C#側
SampleStruct[] stTest = new SampleStruct[10];
stTest = LIBSAMPLE.hogehoge();

ここで、stTest[0].cUpdateからstTest[9].cUpdateまでを見ると
全部2が入っております。(本当は[2].cUpdateだけ2が入っていて欲しい)
どこが原因か分かりますでしょうか?
OS:XP
環境:VS2008 ExpressのC++版とC#版を使ってます。
13デフォルトの名無しさん
2010/03/25(木) 18:34:20
>  static CHAR cUpdate; 
Cさえ理解していないのがよくわかる。
14デフォルトの名無しさん
2010/03/25(木) 18:45:45
うわ・・・・・
泣ける・・・・orz

回答有難うです
15デフォルトの名無しさん
2010/03/25(木) 18:53:51
突っ込みどころや怪しい箇所が多すぎて、どうしたいかが見えてこない(笑
配列はC++/CLIでアロケーションしていいのかとか。
C#でいう構造体はvalue class (or struct)であって、ref structはクラスだけどどっちにしたいのとか。
1612,14
2010/03/25(木) 19:13:48
目的は、「Cで書かれたライブラリをC#で使う」事なのですが、
現状は、Cの方には手を加えないように、やる方法として、C++/CLIで
ラッピングするという手段があるという事なので、作業している次第。

そこで、構造体のポインタを戻り値としている関数はどう扱えば?と
思ってましたら、
http://ap.atmarkit.co.jp/bbs/core/fdotnet/17380
このような話をみつけたので、まずはref structでやってるという状況です。
17デフォルトの名無しさん
2010/03/25(木) 20:50:34
CのライブラリだったらC++/CLIなんか使わずにC#でDllImportすればいいような
1812,14
2010/03/26(金) 09:55:14
>>17
説明不足でした。
(当然の疑問ですよね)

そのCのライブラリというのが、元がスタティックしか考慮されておらず、
DLL用にはなってなく(__declspec(dllexport)のような記載は一切なし)、
選択肢として
1 Cのソースをdll対応に修正(__declspecを全関数に追加)
2 元のCには手を加えず、新しくラッパーを作る

があり、今後もCの方は勝手にバージョンが上がっていくので、
それなら、元のソースに手を加えない方向でやろうとなった次第です。
19デフォルトの名無しさん
2010/03/26(金) 10:26:08
だからってそのラッパーをC++/CLIで書く必要はないだろ
Cで薄ーいラッパー書いて普通のネイティブDLLとしてコンパイルすればおk
C++のライブラリとなると面倒だけどそうでないならC++/CLIはできるだけ避けたほうが賢明
2012,14
2010/03/26(金) 12:05:28
>>19
その手がありましたか!
C#でDllImportして、
DLL関数に渡す構造体、DLL関数から受け取る構造体は
[StructLayout(LayoutKind.Sequential)]を用いてC#側に定義して
やりとりするという事ですね。

試してみます
21デフォルトの名無しさん
2010/04/25(日) 20:06:11
【初心者歓迎】C/C++室 から誘導されてきました。

Form1とForm2があり、Form1からForm2を呼び出すようにしています。
また、Form2に配置したボタンを押すと関数が呼び出されて、所望の処理をするようにしています。
以下の2点について教えてください。

1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。
2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。

両方ともポインタを使えば出来そうな気がするのですが、例えば2.の方ではForm2を指すポインタの宣言の仕方が
わからないです。

よろしくお願いします。
22デフォルトの名無しさん
2010/04/25(日) 20:24:49
>>21
ポインタじゃなくて参照になる。
Form2^ form2;
23デフォルトの名無しさん
2010/04/25(日) 20:26:28
>>21
動くかどうかは試してない。

【Form1.h】
ref class Form1 {
public: System::Void Form1Func() {〜}
private: System::Void Form2Func();
private: System::Void Form1_KeyDown(〜) {Form2Func();}
}
【Form1.cpp】
#include "Form1.h"
#include "Form2.h"
System::Void Form1::Form2Func(){
Form2^ form2 = safe_cast<Form2^>(Application::OpenForms["Form2"]);
form2->Form2Func();
}
【Form2.h】
ref class Form2 {
public: System::Void Form2Func() {〜}
private: System::Void Form1Func();
private: System::Void Form2_KeyDown(〜) {Form1Func();}
}
【Form2.cpp】
#include "Form1.h"
#include "Form2.h"
System::Void Form2::Form1Func()
{
Form1^ form1 = safe_cast<Form1^>(Application::OpenForms["Form1"]);
form1->Form1Func();
}
2421
2010/04/25(日) 23:09:54
>>22>>23
ありがとうございます。
残念ながらうまくいかないです。

環境はVS2005 C++ WinXP SP3
Form1(親フォーム)からはForm2.hをインクルードして
Form2^ frm = gcnew Form2();
frm->ShowDialog();
とできるのですが、Form.hではForm1.hをインクルードすると循環参照になってしまうようでエラーになります。
また、Form2.h内で関数宣言だけしてForm2.cpp内でForm1.hをインクルードして実行部分を書こうとしましたが
Form2.h内の関数宣言(>>23のprivate: System::Void Form1Func();にあたる部分)がコンパイルエラーになってしまいます。

25デフォルトの名無しさん
2010/04/27(火) 01:31:54
なんでこういう意味での初心者がC++/CLIなんてマニアックな言語触ってるんだろう……?

> Form2に配置したボタンを押すと関数が呼び出されて
> 1.関数内の処理の進捗をForm2内のLabelやProgressBarに表示したいです。
Form1関係ないよね? Form2が勝手にやってろって話

> 2.Form2からForm1を操作したい(Form2のボタンを押すとForm1/Form2ともに終了するようにしたい)です。
Form1がForm2を作ったとき、Form2のFormClosedイベントに引っかけるとかすればいいんじゃね?

// Form1内のForm2を表示させる処理
Form2^ form = gcnew Form2();
form->FormClosed += gcnew FormClosedEventHandler(this, &Form1::OnForm2Closed);
form->Show();

// Form1内で定義
private: void OnForm2Closed(Object^ sender, FormClosedEventArgs^ e) {
  this->Close();
}

×アイコンで閉じたときはForm1は閉じない、ボタン押したときだけとかなら
Form2にCloseWithParentみたいなプロパティ用意して
表示させるときのForm2^はメンバ変数に保持しておいて
OnForm2Closedで確認
26デフォルトの名無しさん
2010/06/07(月) 09:58:49
C++/CLIだと、Cのランタイム例外のハンドリングが出来ない臭いんだけど、どうすれば良いんだろう…
ハンドラ設定してるのに動いてくれない
例えば_tcsftime(..., L"%h", ...);みたいなやつ

※普通の例外じゃないんで、マネージand/orネイティブでもtry catch出来ない
27デフォルトの名無しさん
2010/06/09(水) 20:43:17
そもそもCRTが例外なんて投げないはずだが

> 727 :デフォルトの名無しさん[sage]:2008/07/03(木) 13:51:22
>     なんで、VC++2008の、strftime _tcsftimeは、
>     書式に無い文字を渡すと例外終了するのかなあ。
>    単に無視してくれりゃいいのに。
>    自前でパースしてから、渡してやるしか無いのかな。
> 729 :デフォルトの名無しさん[sage]:2008/07/03(木) 14:11:02
>     ちょっと見てみたけど
>     _ASSERTE( ( "Invalid format directive" , 0 ) );
>     だからデバッグ時だけの話じゃん。
28デフォルトの名無しさん
2010/06/10(木) 10:35:20
>>27
http://msdn.microsoft.com/ja-jp/library/ksazx244(v=VS.80).aspx

試してみると早いかも…

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
tm tmNow;
__time64_t tNow;
TCHAR sz[20];
try
{
_time64(&tNow);
_localtime64_s(&tmNow, &tNow);
_tcsftime(sz, 20, L"%h", &tmNow);
}
catch (...)
{
Console::WriteLine("error!");
}
Console::ReadLine();

return 0;
}
29デフォルトの名無しさん
2010/06/10(木) 13:07:44
ハンドラ設定ってなんだ普通に_set_invalid_parameter_handlerで呼んでくれたが
30デフォルトの名無しさん
2010/06/14(月) 22:16:23
SerialPortクラスを使ってデータを受信する際、
・SerialPort::Data_Receivedイベントで受信
・受信データはQueueクラス経由でメインスレッドから受信
・メインスレッドでは、あるバイト数を数秒以内に受信できない場合タイムアウト
を、実装したいのですが、タイムアウト処理はどのように記述したら良いのでしょうか?

// Data_Receivedイベント
private: System::Void serialPort_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
int length = serialPort->BytesToRead;

array<unsigned char>^ buffer = gcnew array<unsigned char>(length);

serialPort->Read(buffer, 0, length);

Queue^ sync_queue = Queue::Synchronized(m_queue);

for (int i = 0; i < length; i++)
{
sync_queue->Enqueue(buffer[i]);
}
}
31デフォルトの名無しさん
2010/06/26(土) 12:09:02
マネージクラスのインスタンスをグローバルスコープっぽく参照する方法ないの?
全コンストラクタでやりとりするようなマンドクセ方法がいやだ
32デフォルトの名無しさん
2010/06/26(土) 15:55:49
クラスの静的メンバに入れとけばいいだけ
33デフォルトの名無しさん
2010/06/27(日) 16:28:42
あと public static ね
34デフォルトの名無しさん
2010/08/05(木) 23:46:40
C++/CLIに書き換えてる奇特なものです

char www[100];
char* ptr;
ptr = www + i;

array<char>^ www = gcnew array<char>(100);
array<char>^ ptr;
ptr = www + i; ← ?

?の部分をご教授くださいm(_ _)m
35デフォルトの名無しさん
2010/08/06(金) 00:53:22
CLI配列はポインタじゃないから無理
36デフォルトの名無しさん
2010/08/06(金) 10:21:40
pin_ptr してもいいけどさ、www[i] で駄目な理由は何なの?
37デフォルトの名無しさん
2010/08/07(土) 08:14:59
C++の感覚なら毎回[i+a]としないで最初からオフセット付けときたいのは当然だろ
無理なので常にwwwとiをセットにして持ちまわるのが普通
メソッドの引数にもオフセットを指定できるようにする
38デフォルトの名無しさん
2010/08/07(土) 22:43:16
perlのように return a, b できるようにしてくんないかな

39デフォルトの名無しさん
2010/08/08(日) 12:07:55
.NET4ではTuple型自体は導入されたのでC#やVBでは将来的に
言語レベルでサポートされる可能性はある。
C++/CLIはほぼ見捨てられてるので期待するだけ無駄。
40デフォルトの名無しさん
2010/08/17(火) 21:49:08
>>34
array<char>^ www = gcnew array<char>(100);
interior_ptr<char> ptr;
ptr = &www[0] + i;
41デフォルトの名無しさん
2010/08/21(土) 06:53:22
VC2010 EEを使用しています。

RS-232Cで通信を行い、プログラムを終了させようとして
this->Close();
を行うと、エラーメッセージも出ないままプログラムが固まってしまいます。

ポートを閉じてないことが原因かと思い、
serialPort1->Close();
を実行してみたところ、今度はここで同じように固まってしまいました。

http://vsug.jp/tabid/63/forumid/46/postid/9991/scope/posts/Default.aspx
を、参考に、BeginInvokeを使用していますが、ダメでした。

この場合、どこを見れば良いのでしょうか?
よろしくお願いします。
42デフォルトの名無しさん
2010/09/18(土) 16:16:15
画像処理を行いたいのですが、
Bitmap、Image、Graphic・・・どのコンポーネントを使うのがお得なのでしょうか
43デフォルトの名無しさん
2010/09/18(土) 16:36:42
>>42
どんな画像処理をするかが分からないと、
えらべないと思われます
4442
2010/09/18(土) 16:48:33
カラー画像をモノクロにしたり、コントラストかけたり、拡大縮小したりの初歩的なことがしたいです。
あと、今のところはCUIで行いたいです。
45デフォルトの名無しさん
2010/09/18(土) 18:01:22
>>44
俺はあまり詳しくないが、
ぐぐると
http://msdn.microsoft.com/ja-jp/academic/cc998604.aspx
ここで
Bitmap クラスを利用することにより、画像に対してピクセル単位で様々な処理を行うことができます
と書いてある
.netのクラスを使うなら、おそらくやりたいことはこういうことだろう
46デフォルトの名無しさん
2010/09/18(土) 23:40:29
Bitmap使ってみたけれど、画像の保存の仕方がわからない・・・
WriteBitmap("C:\\・・・",data)とかdata.Save(・・・)ってな感じでできないのかな
47デフォルトの名無しさん
2010/09/18(土) 23:43:33
普通にSaveメソッドあるだろ
48デフォルトの名無しさん
2010/09/19(日) 05:14:50
ホントだ。ごめん、見逃してたわ。
49デフォルトの名無しさん
2010/09/20(月) 03:53:30
なぜ下記のようなプログラムでエラーが発生するのかわかりますか??

 --- プログラム ---
#include "stdafx.h"
using namespace System;
using namespace System::Drawing;

int main(array<System::String ^> ^args){
  Bitmap^ image = gcnew Bitmap("test.jpeg");
  image->SetPixel(0,0,Color::Black);           ←ここでなぜかエラー起きます
  image->Save("test2.bmp");
  return 0;
}

 --- エラー内容 ---
ハンドルされていない例外: System.ArgumentException: 使用されたパラメータが有効ではありません。
場所 System.Drawing.Bitmap..ctor(String filename)
場所 main(String[] args) 場所 c:\documents and settings\***\デスクトップ\test\test.cpp:行 10
場所 mainCRTStartupStrArray(String[] arguments) 場所 f:\dd\vctools\crt_bld\self_x86\crt\src\mcrtexe.cpp:行 309
50デフォルトの名無しさん
2010/09/20(月) 07:25:44
>>49
test.jpegはちゃんとプロジェクトファイルと同じ階層にある?

余計なお世話かも知れないが、.netでやるなら
C#で作ったほうが楽なんじゃないだろうか・・・
わざわざマイナーな環境で挑戦するよりもいいと思うんだが
51デフォルトの名無しさん
2010/09/20(月) 08:08:59
>>49
落ちてる場所は、その上の行だぞ。
52デフォルトの名無しさん
2010/09/20(月) 11:32:08
これだけ利用者に嫌われてる言語も珍しいな
初心者が質問するたびに使うなと勧められる
53デフォルトの名無しさん
2010/09/20(月) 13:44:55
>>50-51
ありがとう。jpegじゃなくてjpgだったという凡ミスしていたことに気づけたわ

・・・一度C#に浮気してみる
54デフォルトの名無しさん
2010/09/20(月) 13:53:46
>>52
嫌われているというか、言語自体が初心者お断りだからな
初心者が無謀なことしようとしていたら、そりゃ止めるだろう
55デフォルトの名無しさん
2010/09/20(月) 14:01:21
C++も.NETも使いこなせる人が、止むを得ず使うための物。
使わなくていいなら使いたくない。
56デフォルトの名無しさん
2010/09/20(月) 15:01:38
始めようにも資料が無さ過ぎる
MDI作るときどうするかとか
ちょっとしたことの逆引きがネット上で全く出てこない


ようやくOpenGL表示できるようになって
C++の頃の遺産をつかえると思ったのに
57デフォルトの名無しさん
2010/09/20(月) 16:33:26
C#でできるから、それを参照にすればいい
なにもかもC++/CLIで済ませようとしないことをお勧めする
58デフォルトの名無しさん
2010/09/21(火) 02:27:48
嫌ってはいないんだ
ただ何故かこの言語とのファーストコンタクトというか接し方が
一言入れておかないと不幸にしかならなそうな人が多いのよね
59デフォルトの名無しさん
2010/09/21(火) 09:55:56
WinFormsデザイナとかC++/CLIにそもそも要らないんだよな
こういうのがあるから「Visual C++ 2008 で簡単GUIプログラミング」みたいな勘違い本やサイトが出て初心者が道を間違える
60デフォルトの名無しさん
2010/09/21(火) 23:18:00
56ですが自分
C++の文法がある程度使えて
フォームデザインが総合開発環境上で扱えて
至れり尽くせりじゃん、と思ってとっかかりました

現実は情報が全く無く
よくわからないクラスとかいっぱいあって
解説も無くて

どうしようと途方にくれていましたが、QTとかよりは
導入コストも再勉強のコストも無いだろうと信じて使ってます。

だって、CやC++だとGUI作るの辛いんだもん
っていう理由だとダメですか
61デフォルトの名無しさん
2010/09/21(火) 23:32:23
まあ正直C++の名前が付いてるだけで
マネージ部分はC++とは直接関係なくて学び直し必要だし

それなら素直にC#
C#2.0の範囲までなら多分C++/CLIより簡単だし
サンプルも多いし将来WPF/Silverlightとかにも応用できるし
C#やっとけば逆にC++/CLIを橋渡し用ぐらいなら書けるようになるし
62デフォルトの名無しさん
2010/09/27(月) 13:44:31
けっきょくC++風に文法を汚したC#と普通のC++を無理矢理くっつけただけの代物だからな
63デフォルトの名無しさん
2010/09/27(月) 14:03:20
>>62
それを一応形にできたところは評価できる。
64デフォルトの名無しさん
2010/09/27(月) 19:28:25
#define健在なり
65デフォルトの名無しさん
2010/09/27(月) 19:37:10
#define private public
66デフォルトの名無しさん
2010/09/28(火) 02:31:06
LPVOIDからarray<String^>^に変換したいのですが、アドバイスください。
//////////Form1_Load//////////
HANDLE hMap;
LPVOID lpBuf;
hMap=CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,L"View");
if(hMap==NULL){Form::Close();}
lpBuf=MapViewOfFile(hMap,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpBuf==NULL){Form::Close();}
if(GetLastError()==ERROR_ALREADY_EXISTS){//すでに同じ名前のオブジェクトが存在する
lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー
///////////ここまで/////////////
つまり二重起動時に共有メモリを使いたいのですが、どうしてもできません。
先人方どんなことでもいいので教えてくだせえ。
67デフォルトの名無しさん
2010/09/28(火) 02:40:23
marshal_asとかじゃねえの
68デフォルトの名無しさん
2010/09/28(火) 02:51:50
> LPVOIDからarray<String^>^に変換したい
>  lpBuf=Environment::GetCommandLineArgs();//コマンドラインから取得//ここでエラー
コードの方はarray<String^>^からLPVOIDに変換したいように見える
69デフォルトの名無しさん
2010/09/28(火) 03:19:27
>>67
2008 Express Editionを使っていまして・・・ヘッダーがないらしいです。
http://www.codeguru.com/forum/showthread.php?t=468408
>>68
コマンドライン引数を得た後、array<String^>^に変換しようと思ったのです。
宣言時からarray<String^>^だとMapViewOfFileでつまずいちゃうので・・・。
どちらにせよ、コマンドライン引数を得た後、
共有メモリarray<String^>^として反映できればいいのですが。
70デフォルトの名無しさん
2010/09/28(火) 03:50:07
全体にコードが滅茶苦茶に見えるし
そもそもLoadイベントなんかでやる処理には見えないけど(mainでやることだろ)

共有メモリにString^を書き込みたいのなら
> http://www.codeguru.com/forum/showthread.php?t=468408
のリンク先にString^をポインタに変換する方法が載ってるからmemcpyなりなんなりすればいい
複数の文字列を書き込む必要があるなら\0なりなんなりで区切る
71デフォルトの名無しさん
2010/09/29(水) 06:10:09
共有メモリをやめてSendMessageに妥協しました
とにかく二重起動時にコマンドライン引数を渡すことができました!
皆様、貴重なアドバイスをありがとねん
72デフォルトの名無しさん
2010/10/03(日) 12:39:42
C++/CLIにおけるsafe_cast,static_cast,dynamic_castの違いについて教えてくださいよ

safe_cast   :型が合わないと例外が発生、実行コスト中
dynamic_cast:型が合わないとNULLを返す、実行コスト大
static_cast  :型が合わなくても何もしない、実行コスト小

この認識であってますか?
73デフォルトの名無しさん
2010/10/03(日) 16:11:05
safe_castとdynamic_castのコストはほぼ同じ。
static_castが速くなるのはダウンキャストの場合だけ。静的に解決できる場合はsafe_castと同じ。
74デフォルトの名無しさん
2010/10/03(日) 20:39:28
>>66
いまさらだけど、.NET Framework 4以降ならMemoryMappedFileクラスを使えばいいと思うよ。
75デフォルトの名無しさん
2010/10/03(日) 20:52:42
.NETのハンドルのダウンキャストにstatic_cast使うのは激しく疑問
公式の説明でもパフォーマンスをえらく強調してるが、
そのためにわざわざ検証不能コードにしてまでやるほどのものなのかと
76デフォルトの名無しさん
2010/10/08(金) 20:22:23
http://www.infoq.com/jp/news/2010/10/Co-Evolution-Doubts
>どうやらそれらは、レガシC++アプリケーションをWindows Phoneに移植したいと考えている多くの開発者にとって、C++/CLIは、ベストなルートに見えるのであろう。

地獄への道は善意で舗装されている
77デフォルトの名無しさん
2010/10/08(金) 20:28:08
筆者自身は否定的に見えるけど、まだそんなこと考えてる人もいるんだねぇ
78デフォルトの名無しさん
2010/10/08(金) 20:52:06
筆者ほんとにC++/CLI触ったことあるのかな
Silverlightで使える範囲のC++/CLIはC++とは全く互換性なくてただの汚いC#なんだけど
79デフォルトの名無しさん
2010/10/08(金) 21:47:31
絶対的処理性能が必要な場合か、過去資産使う時以外はメリットよな?
80デフォルトの名無しさん
2010/10/08(金) 22:05:21
検証可能なコードしか使えない場合は処理性能同じだし過去資産も使えないよ
81デフォルトの名無しさん
2010/10/09(土) 21:36:15
音の再生ってC++/CLIでできるの?
画像の場合ピクチャボックスみたいな感じに楽に音楽再生させたいのだけど
82デフォルトの名無しさん
2010/10/10(日) 23:03:16
ネイティブのC++でできるなら同じ方法でできる
.NET使ってもできる
どちらにしてもC++/CLIとは直接関係ない話
83デフォルトの名無しさん
2010/10/11(月) 00:46:33
サンクス
これ絶対初心者向けじゃない気がする
84デフォルトの名無しさん
2010/10/11(月) 00:49:57
「気がする」ではない。
絶対初心者向けではない、その通りだ。
85デフォルトの名無しさん
2010/10/11(月) 06:02:46
ですよね
俺みたいな勘違い君が集まるから
スレタイ変えると平和になる気がする
86デフォルトの名無しさん
2010/10/11(月) 11:40:19
「C#でアプリを作っているが、C++のライブラリで音を鳴らしたい」もしくは
「C++(非CLI)でアプリを作っているが、.NETのライブラリを使って音を鳴らしたい」
→そこだけC++/CLIを部分的に使おう
という風に特別な意図を持って言語であって、
>>81のような質問が出てくる時点でC++/CLIを使うのは間違っている
87デフォルトの名無しさん
2010/10/11(月) 12:08:45
前者はCLIでなくていいだろ
88デフォルトの名無しさん
2010/10/11(月) 13:10:09
そんなに大きなライブラリでなければ>>19方式がベターだな
89デフォルトの名無しさん
2010/10/11(月) 15:50:17
初心者用のC++/CLIじゃなくて
C++/CLIの初心者向けのスレなんだよなw
90デフォルトの名無しさん
2010/10/11(月) 16:27:40
C++/CLI初心者にクラスチェンジできる条件が、

1) C++習得レベル一定以上
2) .NET習得レベル一定以上

だからな
91デフォルトの名無しさん
2010/10/12(火) 02:47:19
C++とC#があった上で補助的に使うもんだからねぇ
みんな言うように初心者が使う物じゃないね。
92デフォルトの名無しさん
2010/10/12(火) 15:18:47
こんなのに熟練したくないわ
どうしても必要なときにちょっと調べてその場が凌げれば充分
93デフォルトの名無しさん
2010/10/12(火) 18:55:47
C++にGCを導入した言語。そう考えれば実用性は高いはず。
94デフォルトの名無しさん
2010/10/12(火) 19:17:34
C++と、GCをサポートした別の言語を混ぜた言語。
アンマネージとマネージの境界は常に意識する必要がある。
95デフォルトの名無しさん
2010/10/12(火) 20:52:46
仕事では使いたくないが、趣味でいじるのなら楽しい。
Express Editionだと実行中のプロセスにアタッチできるのが
C++しかないってのも使ってる理由のひとつ。
96デフォルトの名無しさん
2010/10/27(水) 21:11:21
日経のムックでC++/CLIが宣伝されてるな。
簡単GUIプログラミング!みたいな見事な勘違い記事だった。騙されて道を誤る初心者が不憫でならない。
97デフォルトの名無しさん
2010/10/30(土) 18:38:53
道を踏み外しそうになり、C++Builderにシフトできました
98デフォルトの名無しさん
2010/10/31(日) 02:19:24
初心者はC#いじっとけ
99デフォルトの名無しさん
2010/11/02(火) 23:54:01
増えた言語仕様って、ref, ^, gcnew だけでしょ?
100デフォルトの名無しさん
2010/11/02(火) 23:59:30
ジェネリック,トラッキング参照,ファイナライザ,プロパティ,イベント,デリゲート, etc
CLI拡張の部分だけでも言語仕様書の量がC#並み
101デフォルトの名無しさん
2010/11/03(水) 00:03:31
2種類の言語が同居してる構造だな。
102デフォルトの名無しさん
2010/11/03(水) 04:25:15
D言語よりマシ。
103デフォルトの名無しさん
2010/11/03(水) 16:45:49
Z言語になるころには
なんとなくこんな感じ、って思い描いたものが
1行で組みあがるくらいに

なるわけねぇ
104デフォルトの名無しさん
2010/11/03(水) 17:28:32
ref classのメンバーに構造体がある場合、その構造体のポインターはどうやって取得すればいいの?
pin_ptr<SCRIPT_STRING_ANALYSIS*> pssa = &(this->構造体型の変数);
こういう風にしてもうまくいかないんだが
105デフォルトの名無しさん
2010/11/03(水) 17:41:24
>>104
自己解決した
単にpin_ptrの型を間違っていただけだった
106デフォルトの名無しさん
2010/11/11(木) 20:14:40
これって変数名とかに全角文字がつかえるのだな。
  int 数値 = 0;
みたいに。
うっかり全角アルファベット混ぜたりしたら大変だな。

107デフォルトの名無しさん
2010/11/11(木) 20:26:13
それCLIでない方のC++でもできるよ
コンパイラが共通なんだから
108デフォルトの名無しさん
2010/11/11(木) 22:11:50
>>106
今のパソコンて、ゼロに斜線が入らないから、うっかり

int 数値 = O;

とかしてしまうとやばいぜw
109デフォルトの名無しさん
2010/11/12(金) 04:36:06
どっかでOが定義済みでないと通らないだろ
110デフォルトの名無しさん
2010/11/12(金) 13:04:12
Windows Mobile用のWM_GESTUREが入ったgesture.hは何を入れたら良いんですか?

Windows Mobile 6 Professional SDK Refresh.msiと
試しにVS2010EEを入れてみたけど
ダメでした

Windows Mobile 6 Professional SDK Refresh.msiは2環境でインストールして
いるのでインストーラがコケたとかでは無さそうです
定義だけなのでGoogle Codeとかでも良いのですが、MS系は上手く手に入りません。

くだすれですがよろしくお願いします。
111デフォルトの名無しさん
2010/11/13(土) 12:22:30
queue<array<String^>^ > queue_dwnload;
こう宣言すると
System.ArgumentException' の初回例外が発生しました。
とイミディエイトウィンドウにメッセージが出るんだけど
宣言の仕方どこが間違ってますか?
112デフォルトの名無しさん
2010/11/13(土) 17:42:15
つ STL/CLI

#include <cliext/queue>
using namespace System;

cliext::queue<array<String^>^ > queue_dwnload;
113デフォルトの名無しさん
2010/11/13(土) 18:21:47
すまん書き足りなかった、インクルードはちゃんとしてて
プログラムも正常に動作してます

それでもう少しシンプルなコードで試してみたんだけど
VS2008で新規作成、プロジェクト、CLRのwindowsフォームアプリケーション
のテンプレートでプロジェクトを作成して
#include <cliext/queue>を追加
~Form1(){}の下あたりに
cliext::queue<array<String^>^ > queue_dwnload;を追加
デバッグ実行する
これだけでメッセージが出ます、キューの宣言は間違ってないみたいだけど
何が原因なんだろう?
114デフォルトの名無しさん
2010/11/13(土) 19:06:11
VS2010にしてしまっているので再現できないが、
~Form1()と同じprotectedには出来ないのかコンパイル時に警告がでる。
privateにしたらどう?

private: cliext::queue<array<String^>^ > queue_dwnload;
115デフォルトの名無しさん
2010/11/13(土) 22:52:09
private:付けてもだめでした
116デフォルトの名無しさん
2010/11/14(日) 14:34:28
とりあえず問題の切り分けだな。
まずコンパイルが警告なしで通るかどうか。
通るならデバッグ実行とデバッグなし実行で差があるかどうか。
別のPCでも再現するかどうか。
117デフォルトの名無しさん
2010/12/02(木) 11:27:46
使用環境:VS2008 Professional Edition
プロジェクト:CLR クラスライブラリ
目的:コピーコンストラクタ、代入演算子を潰したい

エラーの出ないコード。
 ref class Hoge sealed {
  private:
   Hoge % operator=( Hoge const % rhd ) { return *this; } ;
   Hoge( Hoge const % src ) {} ;
 }

実装したいコード。
 ref class Hoge sealed {
  private:
   Hoge % operator=( Hoge const % ) ; // error LNK2020 未解決のトークン(06000001) Hoge::op_Assign
   Hoge( Hoge const % ) ; // error LNK2020 未解決のトークン(06000003) Hoge::ctor
 }

C++/CLIでメンバ関数の実装をせずに放置というのは可能でしょうか?
118デフォルトの名無しさん
2010/12/02(木) 18:43:31
そもそもref classは定義しない限りコピーとか無理じゃなかったか
119デフォルトの名無しさん
2010/12/02(木) 19:44:11
C#などから使わせるつもりなら演算子のオーバーロードは全部staticにしないといけないし
代入演算子やコピーコンストラクタはそもそもオーバーロードできないし
constも使えないし参照渡しや参照返しもダメ(そもそもref classだから無意味)
つかまずC#やるべき。.NETの常識が無さすぎ。
120117
2010/12/02(木) 22:33:30
>>118
そうなんですか、回答ありがとうござます。

>>119
回答ありがとうございます。
http://msdn.microsoft.com/ja-jp/library/sy1y3y1t(VS.80).aspx
このサンプルコードのコンパイルが通らなかったのですが、そもそもサンプルが間違ってるという事なのでしょうか?
あと、.NETの常識を学ぶのにオススメの書籍などあれば教えていただけると幸いです。
121デフォルトの名無しさん
2010/12/03(金) 11:24:33
Lock に関係ない実装は省略して書いてるだけでしょ
間違ってると言うより、そこは問題とは関係ない部分なだけ
122117
2010/12/03(金) 12:41:30
>>121
回答ありがとうございます。
別途実装をするしか無いという事ですね。分かりました。

そうすると >>119 の回答から考えて、C#などから使わせるつもりが無いなら、
・演算子のオーバーロードはstaticにする必要はない
・代入演算子やコピーコンストラクタはオーバーロードできる
・constも使えて参照渡しや参照返しもOK
ということでしょうか?
123デフォルトの名無しさん
2010/12/03(金) 15:36:41
C++/CLIではref classのメソッドにconstを付けられないから
C#やVBと相互運用しないとしてもconstパラメータは事実上役に立たない。
124デフォルトの名無しさん
2010/12/04(土) 13:39:31
趣旨がわからないね。
C++スタイルでやりたいだけなら、そもそもC++/CLI 使う必要性がないんでない?
125117
2010/12/04(土) 14:33:18
>>123
回答ありがとうございます。
Hoge % operator=( Hoge % arg ) { 代入処理の実装 } ;
これだと代入元が書き換えられそうで気持ち悪いですけど、そういう流儀なのですね。分かりました。

>>124
>>122 の質問に関しては元々あった疑問ではありません。
>>119 の解答に書かれている内容に関しての事実確認です。
趣旨に関してはスレ違いだと思いますので書きません。
126デフォルトの名無しさん
2010/12/04(土) 14:48:36
%もいらん
ref classだから常にポインタ渡し
127デフォルトの名無しさん
2010/12/05(日) 13:03:24
>>124
MSのサンプルだか自動生成されるコードだかで、
あんな風にrefクラス上でC++っぽいことをやっているものを見た覚えがある。
元の質問者のコードもそういうのに影響されたのではないかと思う。
128デフォルトの名無しさん
2010/12/05(日) 14:36:18
private ref struct A{
UInt32 data[5];
};
これがコンパイル通らないんだけど、
array<UInt32>^ data;とかにしていちいちgcnewするしかないんですか?
データ宣言するだけのためにコードなんて書きたくないので、うまい解決法お願いします。
129デフォルトの名無しさん
2010/12/05(日) 15:20:34
うん、array<UInt32>^にしてコンストラクタ書くしかないんではないかなあ。
130デフォルトの名無しさん
2010/12/05(日) 21:27:52
C#では構造体でstackallocが使えるからvalue classならいけるだろうと思ったけど無理なのね
この手の機能でC#に負けてどうする
131デフォルトの名無しさん
2010/12/05(日) 21:36:00
CStringを使うには何をインクルードすればよいの?
atlstr.h、atlbase.h、atlapp.hは入れてるけどコンパイルとまる
132デフォルトの名無しさん
2010/12/06(月) 21:09:33
VC++2010 ExpressEditionです。

System::windows::form::timer で一秒ごとにlabel->textを更新していますが(要は時計です)
最小化から復帰するとlabel->textが更新されなくなります、何故でしょう。
133デフォルトの名無しさん
2010/12/07(火) 22:12:40
最小化したときにとめたタイマーを元に戻すんだキバヤシ
134デフォルトの名無しさん
2010/12/08(水) 00:35:19
そもそもUI用のタイマで時計を作るな
MSDNにもはっきりそう書いてあるだろ
135デフォルトの名無しさん
2010/12/08(水) 00:44:46
>>133

故意に止めるようなことはしていないんですが、そういう仕様なんでしょうか?
136デフォルトの名無しさん
2010/12/08(水) 00:46:00
>>134

えぇぇぇぇぇ。時間分解能が悪いとかあの辺ですか!ヽ(´Д`;)ノアゥ...
スレッドタイマークラスとかに変えます。ご教授ありがとうございます。
137デフォルトの名無しさん
2010/12/08(水) 00:57:53
MS公式のガイドラインかなんかで「System.Windows.Forms.Timerで時計を作らないでください」って無かったっけ?
どこだったか忘れたけど
138デフォルトの名無しさん
2010/12/08(水) 11:59:01
一番使い易いところにあるのに、一番性能悪いとかひでー話だよな
俺も最初使ってみて混乱した
139デフォルトの名無しさん
2010/12/08(水) 14:19:36
使い方も知らずに使うとか・・・
140デフォルトの名無しさん
2010/12/09(木) 00:12:13
VS2005です。
C++/CLIでラップしたネイティブのライブラリから例外が発生して、
C++/CLI側でcatchした時に、
ネイティブ側のインスタンスのデストラクタが呼ばれません。
これはバグと考えて良いのでしょうか?

VC++2010 expressでは普通に呼ばれたので・・
141デフォルトの名無しさん
2010/12/09(木) 03:14:40
>>132です。

あれからいろいろいじりまくっていたんだけど、どうもフォームの透過色(TransparencyKey)が特定の色の場合
この問題が発生しているようです。引き続き調べてみます。
142140
2010/12/10(金) 18:48:44
全く相手にされてないようですが、
解決したので適当に報告しときます。

とりあえず、ネイティブのライブラリオプションを
/EHscから/EHaに変更することで、デストラクタが呼ばれるようになりました。

どうやらオプションの違いでABIに互換性が無くなり、
例外をハンドルできても、その後のアンワインディングを正常に実行できていなかったようです。

デフォルトのオプション設定だと上記のような状態になるので、
自分みたいに知らずに組んでる人はメモリリークし放題ですね。
143デフォルトの名無しさん
2011/01/11(火) 22:48:33
C++/CLIでSystem::Actionって使えないの?
event Action^ Foo;
とやると
エラー1error C2955: 'System::Action' : クラス ジェネリック を使用するには ジェネリック 引数リストが必要です
って出てくる…
144デフォルトの名無しさん
2011/01/11(火) 22:54:33
Action<T>はmscorlib.dllだがそれ以外はSystem.Core.dllだ
145デフォルトの名無しさん
2011/01/11(火) 22:57:47
>>144
ありがとう…
おまえそんなところにいたのか…
146デフォルトの名無しさん
2011/02/05(土) 21:22:18
聞きたいんだけどスレ住人はVC2010でC++/CLI書いてる?
それともインテリセンス使うために2008書いてる?
それともC++/CLI書かない?
147デフォルトの名無しさん
2011/02/05(土) 21:30:17
C++/CLI書かない…けど次の案件がVS2010指定でネイティブDLL呼び出す必要があるから
書かざるを得なくなるかもしれなくてちょっと憂鬱
148デフォルトの名無しさん
2011/02/05(土) 22:28:46
.NET用言語で一番の糞言語だからね>C++/CLI
149デフォルトの名無しさん
2011/02/05(土) 22:49:37
>>148
C++自体が言語として糞だから仕方がない。
それと互換性保ちながらここまで実現したということを考えると、かなりすごいと思う。
150デフォルトの名無しさん
2011/02/05(土) 22:50:52
互換性?ねーよ。
151デフォルトの名無しさん
2011/02/05(土) 22:54:50
>>150
え。それは、今では使うのは好ましくないとされているレガシー関数群をいまだにお使いになられているからではないですか?
152デフォルトの名無しさん
2011/02/06(日) 11:47:30
CとC++に互換性があるとは言わないだろ
CLIの部分については互換性ゼロなんだから
153デフォルトの名無しさん
2011/02/06(日) 11:51:41
>>152
> CとC++に互換性があるとは言わないだろ
それは上位互換ありでしょ。完全ではないけれども。
154デフォルトの名無しさん
2011/02/06(日) 12:50:45
boostを完璧にコンパイルできないだろとか言い始めるのかと思ったら
斜め上をいく馬鹿だったか
155デフォルトの名無しさん
2011/02/08(火) 22:27:38
初心者です。
ストリップメニューを開くと5個ぐらい項があって
3つチェックされているとして、その3という数字を取りたいのですが
どうすれば良いでしょうか?
開く部分の変数はStripMenuItem1です。
for(int = 0;i<StripMenuItem1->項目数;i++){if(StripMenuItem1->子項目->checked == true){temp++;}}
みたいなのはありますでしょうか?どうすれば良いでしょうか?よろしくおねがいします
156デフォルトの名無しさん
2011/02/08(火) 22:55:33
自前で数えろよ、毎回書くのがいやなら関数にしとけ。
157デフォルトの名無しさん
2011/02/08(火) 23:02:04
>>155
StripMenuItem1.Itemsプロパティで子が全て取得できる
言っちゃ悪いけどそういう意味での初心者がC++/CLIなんか使うもんじゃない
先にC#覚えて
158デフォルトの名無しさん
2011/02/08(火) 23:03:11
>>156
レスありがとうございます
申し訳ありません。理解できません
何か関数があるのでしょうか?
自前で数えるといっても、2個チェックのときは2と自動で取ってこれるようにしたいのです。
そういえば
if(項の変数->checked == true){temp++;}
を何行も書けばいいだけですね。ありがとうございました!
159デフォルトの名無しさん
2011/02/08(火) 23:03:52
>>157
ありがとうございました!
160デフォルトの名無しさん
2011/02/08(火) 23:11:25
ときどき勘違いした可哀想な子が紛れ込んでくるな
>>21>>42はまだC++/CLI使ってるんだろうか
161デフォルトの名無しさん
2011/02/09(水) 00:53:00
次スレでは「初心者用」を消して、

> - C++プログラミング
> - .NETプログラミング (C#, VB.NET, etc.)
>
> に不自由する方はお引き取りください

とか若干きつめに書いておけばいいじゃね?

何年先になるかは分からんけどw
4,5年ぐらい?ww
162デフォルトの名無しさん
2011/02/09(水) 06:13:09
WCHAR f[] = aToolStripMenuItem->Text->ToCharArray();
cli::array<Type,dimension> ^' から 'WCHAR []' に変換できません。
->ToCharArray();でWCHARが帰ると思っていたのですがなぜでしょうか?どうすれば良いですか?
163デフォルトの名無しさん
2011/02/09(水) 06:31:17
そのWCHAR[]をどうしたいかによる
164デフォルトの名無しさん
2011/02/09(水) 06:33:29
>>163
wcscpyしたいです。
というか元々wcscpyの引数に入れるつもりでしたができませんでした。
165デフォルトの名無しさん
2011/02/09(水) 07:06:40
>>163
ちなみに、第二引数にその->TEXTの文を入れて
別に用意した第一引数のWCHAR[3][]とかに入れたいのです
166デフォルトの名無しさん
2011/02/09(水) 07:48:58
>>161
もともとは初心者お断りスレもあったが、話題があまりなくて落ちた
>dat落ち姉妹スレ
>C++/CLI part3
167デフォルトの名無しさん
2011/02/09(水) 09:38:59
このスレでもC++、.NETの初心者は対象外だけどな
168デフォルトの名無しさん
2011/02/09(水) 11:16:29
>162
文字列操作はこれがひっかかったぞ
http://vene.wankuma.com/prog/CppCli_strings.aspx
169デフォルトの名無しさん
2011/02/09(水) 11:18:17
>>168
サンクス
おせーよ
170デフォルトの名無しさん
2011/02/09(水) 15:36:36
C++と.NETの両方を極めないとCLIは使いこなせないからな
171デフォルトの名無しさん
2011/02/12(土) 16:44:50
Express EditionでもC#プロジェクトと同じソリューションに入れられればいいのになあ
VCのExpress Editionが入門者向けというより達人の縛りプレイ用になってるじゃないか
172デフォルトの名無しさん
2011/02/12(土) 17:53:40
CLI使わないという選択肢はないのかw
173デフォルトの名無しさん
2011/02/12(土) 18:35:17
そんな選択肢があったらこのスレにいない
174デフォルトの名無しさん
2011/02/13(日) 04:23:39
>>171
金払え
175デフォルトの名無しさん
2011/02/18(金) 09:47:29
ダイアログで値を入力させて、その値を親ウィンドウで処理したい場合に
どうやって値の受け渡しをすればいいの?
親にpublic関数を用意して呼び出すのが簡単なわけだけど
この.hファイルに親の.hファイルをインクルードすると子のデザイナが壊れる
子ダイアログで親の形を認識させる手段がない
176デフォルトの名無しさん
2011/02/18(金) 10:00:22
子のプロパティを公開して親からアクセスすればいいんじゃねえの?
177デフォルトの名無しさん
2011/02/18(金) 16:30:00
比較関数を書く形式で、リスト(cliext::list)をクラスのメンバで
ソートするにはどうしたら良いでしょうか?
こんな感じじゃないかと思うのですが
「関数呼び出しには引数リストがありません。
メンバへのポインタを作成するために '&Test::Form1::less' を使用してください」
とエラーが出ます
以下コードを簡略化して書いてます

//クラスTest
ref class Test
{
public:
DateTime date;
Test(void){};
};

//比較関数
bool less(Test^ lhs, Test^ rhs)
{
return lhs->date < rhs->date;
}

//リストの作成
list<Test^> list_item;
Test^ item = gcnew Test();
list_item.push_back(item);//(以下省略

//ソートする
list_item.sort(less);
178デフォルトの名無しさん
2011/02/18(金) 17:09:32
試してないけど、static にして Test::less じゃね?
179デフォルトの名無しさん
2011/02/18(金) 17:41:53
レスありがとうございます
Form1クラスの上で定義したらできました
いまいちよくわからないですが
これからじっくり理由を考えて見たいと思います、感謝
180デフォルトの名無しさん
2011/02/20(日) 21:49:54.49
VC++のスレでこちらの方がふさわしいのではないかと言うことで移ってきました。

 VC++2010 Expressでフォームからマウスが外れているときはフォームの透明度を
あげる(薄くする)と言うプログラムを組んでいます。フォームのMouseLeaveイベントと、
MouseEnterイベント発生時にOpacityプロパティを変えることで実現を目論んだのです
が、ウインドウの外枠(サイズを変えるときにドラッグする部分や、上部のウインドウ名
が書かれている部分)にマウスがあると、MouseLeaveイベントが発生して、薄くなって
しまいます。もちろん、ここではたとえ、フォーム外側から移動してきてもMouseEnter
イベントは起きません。
 フォームから完全にマウスカーソルがそれた時のみ透明度を高めたいのですが、
どういうイベントを用いればよいんでしょうか?
181デフォルトの名無しさん
2011/02/21(月) 01:14:11.85
で、その質問内容のどこがC++/CLIに関係しているんだ?
182180
2011/02/21(月) 07:06:34.79
ってことは、.Net Frameworkのスレ探します。
183180
2011/02/21(月) 07:08:31.22
.net Framework関連のスレって見つからないんですが、どこが適切でしょう。
すみません。
184デフォルトの名無しさん
2011/02/21(月) 07:51:25.56
ふらっとあたりで聞けばいい
185デフォルトの名無しさん
2011/02/26(土) 23:54:49.36
ref classのメンバー変数にID2D1SolidColorBrush*のようなものがある
template <class T> inline void SafeRelease(T *ppT)
{
unsigned long refCount;
if (*ppT)
{
refCount = (*ppT)->Release();
*ppT = NULL;
}
}
にID2D1SolidColorBrush*のポインターを渡すことが出来ないからpin_ptrで渡してたんだが、いい加減書くのがめんどくさくなってきた
スマートに処理しようと思い、template <class T> inline void SafeRelease(T *%ppT)というパラメーターの関数を定義したんだが、こいつへの渡し方がわからない
誰か教えてくれまいか
186デフォルトの名無しさん
2011/02/27(日) 02:13:39.66
あるプロセスをオープンしようとしてます
読み取り専用で試したが結果は同じ
CLIとしてコンパイルしたWindowsアプリからOpenProcessを呼び出すとフル権限で開ける
C++としてコンパイルしたコンソールアプリからはOpenProcess読み取り専用でもアクセス拒否される
OSはWindows7 64bit
内部のことは分からないですが、OpenProcessは同じ標準process.h内のものを使ってると思う
少なくともソース上ではそういう記述をしてますがコンパイラが何をしてるかまでは定かじゃないです
大きな違いはコンソールアプリであることですが、それが拒否の原因になるんでしょうか?
187デフォルトの名無しさん
2011/02/27(日) 18:39:56.37
VC2010を使用しています。
テキストボックスに文字が入力され、エンターを押されたら動作する処理を行いたいのですが、
TextChangedイベントに
if(TextBox1->Text->EndsWith("\r\n"))
では、認識出来ないのですが、どのようにすればよろしいのでしょうか?

よろしくお願いします。
188デフォルトの名無しさん
2011/02/27(日) 19:14:15.81
フレームワークの話しはスレ違い
189デフォルトの名無しさん
2011/02/27(日) 19:44:49.91
フレームワークの話はどこですれば良いのでしょうか?
190デフォルトの名無しさん
2011/02/27(日) 19:48:31.21
C#の質問にして、ふらっとC#で聞くといい
191デフォルトの名無しさん
2011/02/28(月) 15:45:27.41
>185
com::ptr で保持して、リリース処理はそっちで対応しちゃあかんの?
192185
2011/02/28(月) 18:59:52.28
>>191
ref classにはcom::ptrはおけない思う
193デフォルトの名無しさん
2011/02/28(月) 19:01:42.54
>>192
すまん。
CComPtrと勘違いしてた
com:ptrはCLRでも使えるのか
194デフォルトの名無しさん
2011/02/28(月) 19:28:37.85
>193
それ用のクラスだぜ
あとは .net Framework の System::Runtime::InteropServices::SafeHandle を実装したら?
195デフォルトの名無しさん
2011/02/28(月) 20:58:29.72
DirectXのリソースの解放にSafeHandleは使えないんじゃなかったっけ
最近のは知らんけど
196デフォルトの名無しさん
2011/02/28(月) 23:42:18.77
>187
KeyPress
197デフォルトの名無しさん
2011/03/01(火) 00:17:52.54
>195
詳しく
198デフォルトの名無しさん
2011/03/01(火) 01:40:02.26
Direct3D自体の作成/解放が1スレッドに限定されるのに対し
ファイナライザスレッドでどーのこーのみたいな話だったか

使えないというか使う意味がない、みたいな
199デフォルトの名無しさん
2011/03/10(木) 18:48:24.24
printfとか普通に書いたとき、
なんでprintfがアンマネージのコードって
コンパイラは理解できるの?

それらしい印になるようなキーワードを
特に書いてないような気がするのだが?
200デフォルトの名無しさん
2011/03/10(木) 18:56:54.84
内部的には #pragma managed や unmanaged 指定がされてんじゃね?
#include か #using かで切り分けてるんだと思うけど
201デフォルトの名無しさん
2011/03/15(火) 00:19:49.85
失礼します。

Form1からForm2を開き、Form2を表示した状態でForm1のテキストボックスにフォーカスを合わせたいのですが、何か良い方法はありますでしょうか?
Form2のShownイベントで、Form1->TextBox1->Forcus();を実行してみましたが、Form1が見つかりませんでした。
よろしくお願いします。
202デフォルトの名無しさん
2011/03/15(火) 14:20:33.94
見つかりませんでしたじゃなくて
見つかる様にするんだよ。
作成時にインスタンス渡すとか、間を取り持つ作るとか
203201
2011/03/23(水) 22:44:49.12
http://imagingsolution.blog107.fc2.com/blog-entry-109.html
ここを参考に、Ownerを指定してもダメでした。

と、言うよりサンプル通りに作ってみても
1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2039: 'Form2_Load' : 'Form2Test::Form2' のメンバーではありません。
1> d:\vc2010\test\form2test\form2test\Form2.h(15) : 'Form2Test::Form2' の宣言を確認してください。
1>d:\vc2010\test\form2test\form2test\Form2.h(60): error C2065: 'Form2_Load' : 定義されていない識別子です。
(以下略)
と、なってしまいました。

Form2.hの宣言
this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 273);
this->Name = L"Form2";
this->Text = L"Form2";
this->Load += gcnew System::EventHandler(this, &Form2::Form2_Load);
this->ResumeLayout(false);

Form2.cppにて
#include "Form1.h"
using namespace Form2Test;

System::Void Form2::Form2_Load(System::Object^ sender, System::EventArgs^ e) {
Form1^ PForm;
if(this->Owner != nullptr){
PForm = static_cast<Form1^>(this->Owner);
}
}

この記述では間違っているのでしょうか?VC2010を使用してます。
よろしくお願いします。
204デフォルトの名無しさん
2011/03/24(木) 02:14:35.75
本当にForm2はグローバル名前空間なのか?

とりあえずヒントだけ出したけど、C++、.NET、プログラミングの基礎にあたる内容はスレチだから返答は不要
というか、C++/CLIはコンパイル可能なコードすら書けないようなプログラミング初心者が使うものじゃない
205デフォルトの名無しさん
2011/03/24(木) 04:38:21.64
VC++2010&CLIで4.0以前(4.0は含まない)のNETを使う方法はありますか?
MSDNには3.5を利用するには2008SP1を入れろとかありましたが
NETのバージョンごとに入れるのはさすがに無駄すぎるので。
206デフォルトの名無しさん
2011/03/24(木) 11:57:27.41
http://msdn.microsoft.com/ja-jp/library/ff770576.aspx
プロジェクトファイルをテキストエディタで編集しろということらしい
C++/CLIで作った混合アセンブリはCLR2(.NET2.0-3.5)向けにコンパイルすると
CLR4では動作しなくなるので注意
インテリセンスも削られてるのでC++/CLIなら2008で作業するほうがいいよ
207デフォルトの名無しさん
2011/03/24(木) 20:41:15.80
>>206
http://msdn.microsoft.com/ja-jp/library/47w1hdab.aspx
こちらのページを読んだところ
2010は4.0だけ、2008SP1なら3.5だけなのかと思ってしまったのですが
2008SP1は2.0〜3.5まで扱えるんですね
2008を入れることにします
ありがとうございました
208デフォルトの名無しさん
2011/04/01(金) 22:50:53.88
質問です

画面を表示させ、ボタンを押したら表示されている画面をbitmapイメージとして保存(出来れば印刷も)したいのですが、
そういう事は可能なのでしょうか?
サンプルソース等探してみたのですが見つからなくて行き詰ってしまいました。
209デフォルトの名無しさん
2011/04/01(金) 22:54:32.68
C# スクリーンショット でググれ
C#だぞ。C++/CLIじゃないぞ。
210デフォルトの名無しさん
2011/04/01(金) 22:57:17.22
>>209
なるほど、C#で調べれば良かったんですね。。
自身に[Alt]+[Print Screen]を送れば良かったんですね
ありがとうございます
211デフォルトの名無しさん
2011/04/02(土) 12:02:12.18
フォーム上にメニューバーを追加したいんですが
どういうソース書けばいいんでしょうか?
212デフォルトの名無しさん
2011/04/02(土) 12:06:00.79
C# MenuStrip でググれ
C#だぞ。C++/CLIじゃないぞ。
213デフォルトの名無しさん
2011/04/02(土) 12:31:38.06
サンクス
214デフォルトの名無しさん
2011/04/02(土) 17:27:27.97
質問です。
テキストファイルから設定を読み取り、動的にリンクを生成し、別プログラムを起動するランチャーを作っています。
動的にリンクは生成できますが、イベントハンドラに仕込むコールバック関数を動的には生成できないため、
1つのコールバック関数を呼び出しそのなかで起動するプログラムを判断せざるを得ないと考えました。

gcnew System::Windows::Forms::LinkLabelLinkClickedEventHandlerで登録される関数には、
呼び出し元のリンクが引数に渡されるので、cliext::mapで事前に、リンクとコマンドラインの組を格納して判断に用いよう
と考えました。が、リンクのハンドラ( System::Windows::Forms::Label^ )はoperator <が定義されておらず
ソートできないため使用できませんでした。

それではcliext::vectorに、リンクとコマンドラインのcliext::pairを格納しようと思いましたが、どうやらムリみたいです。
実際コンパイルエラーになりました。参考ウェブサイト:
http://blogs.wankuma.com/episteme/archive/2007/11/21/109646.aspx
http://d.hatena.ne.jp/crimsonwoods/20071130/1196384990

どうすれば、リンクとコマンドラインの型を管理できるでしょうか。
リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、
コマンドラインをメンバ変数として持たせるというのも考えましたがどうも無理やり過ぎる気がします。
何かよい方法はないでしょうか。
215デフォルトの名無しさん
2011/04/02(土) 17:39:23.59
.NETでSTLは使うな
System.Collections.GenericのDictionary<,>使え
というか>>208以降の人はC++/CLIやる前にまずC#やったほうがいい
216デフォルトの名無しさん
2011/04/02(土) 17:45:48.60
>>215
お早い回答ありがとうございます。
> System.Collections.GenericのDictionary<,>使え
どのようなものか、調べてみます。

> というか>>208以降の人はC++/CLIやる前にまずC#やったほうがいい
C++を既に学習しており、基本C++の文法でいける(と私が思う)C++/CLIのほうが新たにC#を学ぶより
よさそうだと考えておりましたが、
今後考えてC#を学ぶことも考えたいと思います。ありがとうございました。
217デフォルトの名無しさん
2011/04/02(土) 17:58:52.75
やったらもう戻ってこないだろう
218デフォルトの名無しさん
2011/04/02(土) 18:01:20.52
コントロールのTagプロパティを使う手もあるけどね
C++/CLIはC++とC#を理解して
その上でもしも両方同時に必要になったときに橋渡しするために嫌々ちょっとだけ使う言語です
219デフォルトの名無しさん
2011/04/02(土) 18:38:49.60
>>218
そんな手もあるのですね。

結局>>214で述べた
> リンクの型(System::Windows::Forms::LinkLabel)を継承したクラスを定義し、
> コマンドラインをメンバ変数として持たせると(略
これで作ってしまいました。今回はこれでいいとして、今後はC#を学んでみたいと思います。
ありがとうございました。
220デフォルトの名無しさん
2011/04/03(日) 17:02:31.86
>>214
手元にあるvs2010では問題なく動いた
221デフォルトの名無しさん
2011/04/03(日) 18:14:41.51
CLIはすぐデザイナが壊れるし
IDEが自動でインデントをぐちゃぐちゃに破壊してくれるので
C++をラップするくらいにしか使わない
222デフォルトの名無しさん
2011/04/03(日) 19:08:09.39
VSの次のバージョンではC++/CLIのWinFormsデザイナは削除したほうがいいと思う
>>219のようなかわいそうな人を生むだけで害悪しかない
223デフォルトの名無しさん
2011/04/03(日) 21:53:39.15
C++もかわいそう
別に「統合」してくれと頼んだわけでもないのに
へんな統合開発環境の下で働かされてる
224デフォルトの名無しさん
2011/04/10(日) 21:32:31.72
繰り返しの多い処理をするとメモリオーバーになってしまいます
どのようにメモリを解放するのですか?
225デフォルトの名無しさん
2011/04/10(日) 21:42:17.88
再現するソース出して
226デフォルトの名無しさん
2011/04/10(日) 21:49:49.30
こういうこと?
http://www.atmarkit.co.jp/fdotnet/dotnettips/021gc/gc.html
227デフォルトの名無しさん
2011/04/22(金) 05:33:09.44
C++/CLIのコードをビルドしたアセンブリにアンマネージコードが
含まれてないかチェックする方法って知ってますか?
なぜこういうことを聞くかというとこのクラスライブラリをマネージコードから
使う必要が出てきたためです。
228デフォルトの名無しさん
2011/04/22(金) 10:25:23.73
/clr:pure
229デフォルトの名無しさん
2011/04/22(金) 11:04:57.59
それで分かればいいよねぇ
230デフォルトの名無しさん
2011/04/22(金) 11:11:26.93
意味がわからん
混在アセンブリはマネージコードから使えるけど
セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら
まず間違いなく/clr:pureではダメで/clr:safeでないといけない
でも/clr:safeなんて世の中にあるC++/CLIのコードのほとんどがコンパイルできないよw
231227
2011/04/23(土) 09:53:36.44
>>228-230
レスありがとう

> 混在アセンブリはマネージコードから使えるけど
> セキュリティとか移植性とかでマネージコードしか使えないケースなんだとしたら
> まず間違いなく/clr:pureではダメで/clr:safeでないといけない

説明不足でした
とにかくC++/CLIのコードのすべてのパブリックなクラスとメンバに
マネージコードからアクセスできるようにしたいんです
アンマネージコードが含まれてるとそれができないんじゃないかと思って質問しました
232デフォルトの名無しさん
2011/04/23(土) 11:45:11.72
アンマネージコードは含まれててもいい
というかそのためのC++/CLI
233デフォルトの名無しさん
2011/04/23(土) 12:23:54.63
何を持って出来ないと思ったかがポイントかな。
とりあえず動くコードを張っとこう。
VS2010だとこのままで動くし、
VS2005-2008の場合はmanifestをちょこちょこいじる必要がある。

// cl /LD /O1 /clr test1s.cpp
#include <iostream>
class baz { public: void say() { std::cout << "Hello BAZ" << std::endl; }};
public ref class Foo { public: void Say() { std::cout << "Hello FOO" << std::endl; baz b; b.say(); }};
ref class Bar { public: void Say() { std::cout << "Hello BAR" << std::endl; baz b; b.say(); }};

// csc /o /r:test1s.dll test1.cs
using System;
class Program {
 static void Main() {
  new Foo().Say();
  // new Bar().Say();// internalは呼び出せない。
 }
}
234デフォルトの名無しさん
2011/04/23(土) 12:31:41.38
clrをマネージだけで使うとかかなりマゾい人だな
235デフォルトの名無しさん
2011/04/23(土) 14:15:04.04
そんな有り得ないというか無意味な使い方を想定するのは不毛だし
C++/CLIみたら混在しているものと見なせばいいよ
236227
2011/04/23(土) 18:24:35.15
>>232-235
レスありがとう

アンマネージが含まれてもマネージから呼び出せるということだけど
C++/CLIのソースコードで画像処理とかやってて、
例えばビットマップの構造体をnewして先頭からのバイト数でアクセスするとか、
その情報を渡してWin32APIを呼ぶとかしまくってるんだけど、
これってアンマネージにコンパイルされるよね。
こんなメソッドをC#から呼んでまともに動作するんだろうかって心配なんです。
237デフォルトの名無しさん
2011/04/23(土) 19:13:47.90
やっぱり、Managed Unmanagedの意味を取り違えてたか。
その程度ならManagedでコンパイルされてるよ。ただしunsafeだけどね。
238227
2011/04/24(日) 11:33:12.50
>>237
マネージだけど暗黙的にunsafeとしてコンパイルされるから
アンマネージのように構造体やポインタが使えるってことか。
納得した。ありがとう。
239デフォルトの名無しさん
2011/04/24(日) 19:03:40.58
文字列を逆順にするプログラムを書こうとした場合、自分で考えると以下のようになりました。

---------------------------
#include <string>

string str = "abcde"
string new_str;

int i;
int length = str.size();
for (i=0; i<length; ++i) {
new_str[i] = str[length-i-1];
}
---------------------------

なにかかカッコ悪い感じがするのですが、
一番スマートな書き方はどのような感じになりますでしょうか?

PHPのarray_popみたいのがあったらwhileで回して綺麗にかけると思うのですが、
C++のstringライブラリにありましたでしょうか?

あと、C++では i++は++iの方がよいと誰かに教わったのですが、理由を忘れてしまいました。
何故でしたでしょうか・・?

ご教示いただけますと幸いです。
240デフォルトの名無しさん
2011/04/24(日) 19:23:40.94
スレ違い
241239
2011/04/24(日) 19:27:37.31
すみません
242デフォルトの名無しさん
2011/04/24(日) 19:43:51.75
このスレ的にはこういう回答になる(笑
// cl /FUSystem.Core.dll /clr:safe test2.cpp
using namespace System;
using namespace System::Linq;
int main(array<String^>^ args) {
  String^ str = "abcde";
  String^ new_str = gcnew String(Enumerable::ToArray(Enumerable::Reverse(str)));
  Console::WriteLine(new_str);
}

拡張メソッドは使えなかったっけ?ちとスマートじゃないな。
243デフォルトの名無しさん
2011/04/24(日) 20:55:50.28
WCHAR [32]' から 'System::Object ^' に変換できません

というエラーがでた場合、どういう変換処理をかいたらいいんでしょうか??
244デフォルトの名無しさん
2011/04/24(日) 21:08:28.84
System::Object^ v_obj = gcnew System::String(v_wchar);
245デフォルトの名無しさん
2011/04/24(日) 22:09:06.50
たぶんこれかな

msclr::interop::marshal_as
246デフォルトの名無しさん
2011/04/24(日) 22:36:22.37
>244
ありがとうございました。その逆の変換はどうするんでしょうか?
247デフォルトの名無しさん
2011/04/24(日) 23:47:43.19
>>242
今時サロゲートペアすら考えないコーディングは絶滅すべき
248デフォルトの名無しさん
2011/04/25(月) 04:59:47.67
>>246
http://msdn.microsoft.com/ja-jp/library/ms235631.aspx
249デフォルトの名無しさん
2011/04/27(水) 16:00:21.03
>>247
サロゲートペア対応に挑戦しようと思うのだが、VS2010expressのコンパイラでエラーになる。
なんかスマートな対応方法ないすか?


literal String^ str = L"「叱る」と「\uD842\uDF9Fる」";

error C3850: '\uD842': ユニバーサル文字名が無効な文字を指定しています。
error C3850: '\uDF9F': ユニバーサル文字名が無効な文字を指定しています。
250デフォルトの名無しさん
2011/04/27(水) 21:36:58.89
>>249
ググると𠮟るのユニコードは「20B9F」となってるけど。
251デフォルトの名無しさん
2011/04/27(水) 21:40:24.11
textBoxに入力した文字を分割して配列に割り当てる方法がわかりません
252デフォルトの名無しさん
2011/04/27(水) 22:11:33.08
C# 文字列 分割 でググれ
C#だぞ。C++/CLIじゃないぞ。
253デフォルトの名無しさん
2011/04/27(水) 23:46:28.19
>>249
\uxxxxじゃなくて\UxxxxxxxxでUTF-32使って指定するとか?
254249
2011/04/29(金) 10:49:09.60
>>250,253
CLRは内部コードが16bitのユニコードなのでこうなちゃうんですね。

C#はこれでいけるのですけどね;;
const string msg = "「叱る」と「\uD842\uDF9Fる」";

とりあえず、これで対応しました。
array<wchar_t>^ cmsg = { L'「', L'叱', L'る', L'」', L'と', L'「', 0xD842, 0xDF9F, L'る', L'」' }; 
String^ msg = gcnew String(cmsg);

サロゲート対応のコードを書いてみました。
http://ideone.com/rXbuf
255デフォルトの名無しさん
2011/04/29(金) 11:04:15.35
string.Concat(
 StringInfo.GetTextElementEnumerator(s)
 .Cast<string>()
 .Reverse()
 .ToArray()
)
でええやん(めんどくさいからC#)
256デフォルトの名無しさん
2011/04/29(金) 12:57:21.31
サロゲートと聞くと松田聖子を思い出す
257デフォルトの名無しさん
2011/04/29(金) 13:17:08.71
.GetTextElementEnumeratorの戻値はIEnumerableじゃくて
IEnumertorだから直接Linqにつなげない。
258デフォルトの名無しさん
2011/04/30(土) 13:14:38.20
文字をシフトJISに変換する方法
259デフォルトの名無しさん
2011/04/30(土) 13:32:03.61
一行で様々な疑問を出させる才能
260デフォルトの名無しさん
2011/05/14(土) 13:44:13.14
C++/CLIの具体的な難点ってなんでしょうか?
少し触ってみたところ、GUIも作り易い感じがするしCライブラリも簡単に使えそうだし、
いったいどういう問題があるのかなと気になりました
(VC++2008EEなのでintellisenseもとりあえず大丈夫です)
261デフォルトの名無しさん
2011/05/14(土) 21:00:19.76
C#やVBと比較して生産性が遥かに劣る
それだけ
262デフォルトの名無しさん
2011/05/14(土) 21:23:06.33
>>261
できればもうちょっと具体的にお願いします
263デフォルトの名無しさん
2011/05/14(土) 21:55:07.50
・C++言語ではなくではなくてC++/CLI言語であること、
 C++/CLI独特の文法を覚える必要がある。C#との互換性もない。
・使う人が少ないので情報が少ない
・Intelisenceの不具合が多い(例え2010でも逃れられない)
・中途半端にネイティブなのでCLRとしての最適化も中途半端。
264デフォルトの名無しさん
2011/05/14(土) 22:05:31.03
Cのライブラリ使うにしても、DllImportの手間を差し引いてもよっぽどでなきゃC#の方が楽なんだよね
265260
2011/05/15(日) 19:08:05.61
どうもありがとうございます
Visual C#を試しに入れてみたところ、
何だこれは…ひょっとしてC++/CLIだけでなくVisual C++自体が手抜き…?と思ってしまいました
これだとたしかに生産性に差が出るかもと思うと同時にMSの露骨な贔屓に少し閉口してしまいました
まだほんの入口ですしCライブラリについて不安はありますが、とりあえず使ってみようと思います
266デフォルトの名無しさん
2011/05/15(日) 23:25:23.90
VC++はネイティブC++の開発環境としては現在最高だろ
言語そのものがインテリセンスやRADに向いてない
C++にはC++にしかできないことをやらせるとMSは言ってるので
フォームデザイナを使うような用途へのサポートが強化されるようなことは今後も期待できない
C++はネイティブ特化、C++/CLIは橋渡し専用
267デフォルトの名無しさん
2011/05/16(月) 00:10:28.27
まだVS2010のC++/CLIのインテリセンスないのか
この分だともうずっと出ないだろうな
268デフォルトの名無しさん
2011/05/16(月) 09:33:24.32
2010で外されたってことは、MSは諦めたってことなじゃないの?
269デフォルトの名無しさん
2011/05/16(月) 10:32:51.80
いや、次のバージョンでは復活させるって言ってる。
問題は「次」というのがSP2なのかVS2014とかになるのかが分からないこと。
270デフォルトの名無しさん
2011/05/16(月) 10:37:08.05
その前にC++/CLI自体が…
今や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の有無にかかわらずここで実行できるじゃないか。");
272デフォルトの名無しさん
2011/05/24(火) 21:38:05.21
だがその処理の呼び出し元でcatchしたかった時はどうする?
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を搭載しない理由もないと言ったところでは?
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)は
どのように書き換えれば良いのでしょうか
すいませんが教えてください

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;
}
279デフォルトの名無しさん
2011/05/26(木) 20:26:26.71
このコンパイルエラーになる
System::Collections::Hashtable ^^ppHashtable1;
って何とかならんかいな。多重ループで毎回dynamic_cast演算子使ってる
と効率悪いだろうし。
280デフォルトの名無しさん
2011/05/26(木) 20:45:23.45
delete [] ppc1; を忘れとった。
それと、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;
283デフォルトの名無しさん
2011/05/27(金) 03:33:53.23
間違えた
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できないからアンマネージは使えない。
285276
2011/05/27(金) 05:15:05.02
中途半端な質問をしてすいませんでした。
>>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];
マネージなクラスというのはどうしようもないな、困ったもんだ。
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ってぼろいな。
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();
}
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();
}
290276
2011/05/28(土) 08:14:55.34
すいませんが再度質問さしていただきます
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);
}
292デフォルトの名無しさん
2011/05/30(月) 12:26:48.80
.NET的には単にreturnで返すのが普通
どうしても参照渡しでやりたいなら
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;
};
と宣言したとして、?の部分には何の数値を入れればよいのでしょうか。
ヘルプを見ると「フィールドの物理的な位置を示します。」
と書かれているのですが、馬鹿なんでわかりません。
どなたか教えてください。

295デフォルトの名無しさん
2011/06/01(水) 21:57:49.20
C++/CLIにおけるジェネリックメソッドとテンプレート関数の違いを説明してくださいお願いします
296デフォルトの名無しさん
2011/06/03(金) 21:20:40.48
>>294
全部0
>>>295
テンプレートはただの言葉遊び
ジェネリックは実行時に展開される
DLLを作る場合、アセンブリのパブリックメンバにテンプレートを使ってはいけない
297デフォルトの名無しさん
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#から読み込む>これなら当然できる
ラップするとはどういうことなんでしょうか
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++ のポインタとか持ってちゃ、混合型になるだろ
301デフォルトの名無しさん
2011/06/04(土) 17:47:19.16
>>297
> structから一つ一つ値を完全にC++/CLIで作った構造体に抜き出し、その構造体をC#から読み込む
もちろんこれ
単純に書くだけなら直接C#でも大して手間の差はない
302デフォルトの名無しさん
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を調べてみます
306デフォルトの名無しさん
2011/06/04(土) 20:31:25.24
XInputだったらXNA使えよ
307294
2011/06/05(日) 04:08:13.35
>>296さん
ありがとうございました。
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;
}
の部分はどのように書けば良いのでしょうか、すいませんが教えてください。
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#へどうぞ。
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ドット最小?
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++の方向のほうがいい?
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だけは無いけど
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は鬼や
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を使えば良いんじゃね?
326デフォルトの名無しさん
2011/06/24(金) 14:52:10.85
こうしてC++/CLIを勘違いした犠牲がまたひとり・・・
327325
2011/06/24(金) 15:04:02.96
と、思っていた時期が俺にもありましたってだけ
MSは頑張って理想通り完成させてくれよう
むしろ諦めたっぽいがw
328デフォルトの名無しさん
2011/06/24(金) 23:04:13.78
正直、むしろ起動速度や処理の即応性とかの GUI こそ C++ でやって、ロジックとかに
.net fw を使うための言語だと思うんだが
329デフォルトの名無しさん
2011/06/26(日) 11:43:42.77
C++とC#を使いこなしたうえで両方を使うために
C++/CLIというならいいけど、両者の利点を
生かすためにいきなりこれ、というのは無理w
330デフォルトの名無しさん
2011/06/27(月) 09:26:00.43
>>328
起動速度や応答性を気にしないなら、C#で十分ってことだな
331デフォルトの名無しさん
2011/06/27(月) 10:22:03.55
いや起動速度はC#と変わらないよ
ネイティブのDLLを読み込む分遅くなることはあっても速くなることはない
それからアンマネージコードとマネージコードの境界を越えるオーバーヘッドは馬鹿にならないので
下手するとマネージコードだけの方が速い
332デフォルトの名無しさん
2011/06/27(月) 10:36:48.76
さらにC++/CLIの存在価値が下がったw
本当にラッパー専用言語だな
333デフォルトの名無しさん
2011/06/27(月) 12:13:07.27
C++にGCを入れろと言う要望への、一つの回答。
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の醍醐味だけど
なんか、こう、便利とは違うんだよなあ…
338デフォルトの名無しさん
2011/06/27(月) 18:05:53.91
マネージドで、ポインタを使いまくれる。
339デフォルトの名無しさん
2011/06/27(月) 19:58:57.49
C#でできなくてC++/CLIでなら可能なポインタ関係の操作ってあったっけ?
C#のunsafeの方が簡潔にCっぽく書けて扱いやすい気がするんだが
340デフォルトの名無しさん
2011/06/28(火) 09:14:21.36
C#はMarshal派

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は無かったことにして、買収しちゃえばそれで済むのに
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#やれと言いたくなる
347デフォルトの名無しさん
2011/06/30(木) 09:58:07.10
>>344
Windowsでの基本はC++だが、
WinFormでの基本はC++じゃない件
348デフォルトの名無しさん
2011/06/30(木) 16:10:30.57
せめてVB並みのインテリセンスを実装してくれ
349デフォルトの名無しさん
2011/06/30(木) 16:29:27.88
2010にインテリセンスのらないの確定か
vNextも最初のバージョンは載らないらしいし
350デフォルトの名無しさん
2011/06/30(木) 23:34:53.54
GUIでUI設計ができてネイティブコードその上爆速コンパイル
Borland時代のDelphiはまさに神言語だったんだなぁと思う
351デフォルトの名無しさん
2011/07/01(金) 00:31:39.48
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で書いていい
361デフォルトの名無しさん
2011/07/05(火) 10:04:29.39
C++/CLIはやれば出来る子
計算部分はネイティブで書いて、GUIや描画部分は.NETにやらせることで
高速かつ生産性の高いプログラミングが出来る

・・・と、言う夢だったのさ
362大天使 ◆uL5esZLBSE
2011/07/05(火) 13:17:03.75
>>357
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でロードできなくなるよ?
366デフォルトの名無しさん
2011/08/17(水) 22:07:00.37
あとはアドイン購入か。
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無理やりつけてやるとか
369デフォルトの名無しさん
2011/08/31(水) 22:00:08.56
プロジェクトをいちいち作るのがめんどくさい…
370デフォルトの名無しさん
2011/09/02(金) 22:58:08.40
MSBuild 用のXMLなんだから、直接修正しろよ
371デフォルトの名無しさん
2011/09/13(火) 13:37:36.74
どうでもいい事だよ C++/CLI で better C なんて
372デフォルトの名無しさん
2011/09/16(金) 11:52:55.12
http://msdn.microsoft.com/en-us/library/windows/apps/hh454076%28v=VS.85%29.aspx
なんかわけのわからないことになってるぞ
C++/CLI切ってネイティブのC++にC++/CLI風のCOM拡張を入れるらしい
373デフォルトの名無しさん
2011/09/16(金) 13:18:45.29
切るんじゃなくてWinRT API用の拡張。
.net framework用には今まで通りC++/CLIを使う。
374デフォルトの名無しさん
2011/09/16(金) 14:44:53.44
.NETとCOMで共通のAPIを用意して、C++は完全ネイティブでCOM使うっていうのは
C++/CLIに比べれば至極真っ当なやり方だと思う
最初からそうしてくれてれば良かったのに
375デフォルトの名無しさん
2011/09/16(金) 21:24:20.48
>>374
それではプラットホームに依存してしまう。
376デフォルトの名無しさん
2011/09/16(金) 21:42:24.87
C++/CLIってCLI拡張の部分は標準化されてるけど
ネイティブコードとどう結びつけるかは実装依存でしょ
CLIに依存する記述だけ言語仕様から削ればCOMとのバインディングは実装次第ってことで問題ない
377デフォルトの名無しさん
2011/09/19(月) 03:32:40.73
Win32アプリケーションとして作成したプロジェクトで、
作成されたウィンドウに.net framework用のコントロールを
貼ることは可能でしようか?
378デフォルトの名無しさん
2011/09/19(月) 06:50:32.14
つ CWinForm...

http://msdn.microsoft.com/ja-jp/library/6xfx8bsa(v=VS.80).aspx
379デフォルトの名無しさん
2011/09/19(月) 15:35:43.23
>>378
ありがとうございます。
MFCのCViewの派生なんですね。
CView系は使いたくないのでちょっとソースを読んでみます。
380デフォルトの名無しさん
2011/09/19(月) 20:45:06.45
別にソース読まなくても、CWinFormsControl じゃ駄目なの?
381デフォルトの名無しさん
2011/09/20(火) 22:52:53.28
>>380
CWinFormsControl で大丈夫そうですね。
ご指摘ありがとうございます。
382デフォルトの名無しさん
2011/09/26(月) 15:27:11.67
>>362
多分わかってるだろうけど、おかしいよ。
Cは安全性を捨ててなんていない。安全性なんて無かった。
383デフォルトの名無しさん
2011/10/12(水) 15:19:32.05
もともと持ってないものは捨てられないわな
384デフォルトの名無しさん
2011/10/16(日) 23:44:09.15
WebBrowserコントロールにNewWindow2イベントを実装する
http://main.tinyjoker.net/Tech/CSharp/WebBrowser%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EB%A4%CBNewWindow2%A5%A4%A5%D9%A5%F3%A5%C8%A4%F2%BC%C2%C1%F5%A4%B9%A4%EB.html

これをVC2008でやりたいんですけどどう書けばいいか分かる人いますか・・・
385デフォルトの名無しさん
2011/10/16(日) 23:51:00.77
C++/CLIならほとんど何も違わないが
C++/CLIはC++じゃないけどそれはわかってる?
そんな質問するような人がなんでC++/CLIなんか使うのか正直意味がわからない
素直にC#使うか、C++やりたいんだったらネイティブでATLやMFC使ったほうが
386デフォルトの名無しさん
2011/10/17(月) 13:53:12.58
初心者用といっても、.NETとC++はマスターしてないと。
387デフォルトの名無しさん
2011/10/17(月) 14:51:10.32
>>384>>385の意味がわかるまで精進しましょう
388デフォルトの名無しさん
2011/10/17(月) 15:51:31.18
むしろ初心者はC++/CLI使うな
389デフォルトの名無しさん
2011/10/29(土) 09:05:13.17
今までFormで自動で作る機能でストリップメニューを作ってたのですがそうすると一個づつthis->A = gcnew... this->B = gcnew...
みたいな感じで作られてしまって、ABCのときもあればABCDEの時もあるようにしたいので
ループみたいな感じでまとめたいのですが
array<System::Windows::Forms::ToolStripMenuItem>^ strips = gcnew array<System::Windows::Forms::ToolStripMenuItem>(5); というやり方だとは教わったのですがこれをメニューアイテムに登録するときに
this->StripMenuItem1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->AToolStripMenuItem,this->BToolStripMenuItem,this->CToolStripMenuItem・・・}
と書いてたのですがここはどうすれば良いでしょうか?
390デフォルトの名無しさん
2011/10/29(土) 09:24:47.38
その前にusing namespace System::Windows::Forms;を入れることを激しくおすすめするw
391デフォルトの名無しさん
2011/10/29(土) 09:30:46.12
どういうことですか?わかりやすく説明してください
392デフォルトの名無しさん
2011/10/29(土) 09:50:02.99
array<System::Windows::Forms::ToolStripMenuItem^>^ じゃないの
っていうかC++/CLIなんかやめてC#やれ
393デフォルトの名無しさん
2011/10/29(土) 09:53:37.07
>>392
ありがとうございます
そこは直しました
this->StripMenuItem1->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(5) {this->AToolStripMenuItem,this->BToolStripMenuItem,this->CToolStripMenuItem・・・}
ここに何を入れていいのかわかりません
C#もやってますがどちらにしろ初心者でわかりませんし・・・
394デフォルトの名無しさん
2011/10/29(土) 10:15:21.39
配列を作ったら次は各要素にToolStripItemのインスタンスを代入する
C#の入門書買って出直してきたら
395デフォルトの名無しさん
2011/10/29(土) 16:39:02.97
for i=0 < .. <i++
IntPtr ptr(hoge[i]);
strips[i] = (gcnew System::Windows::Forms::ToolStripMenuItem());
strips[i]->Text = System::Runtime::InteropServices::Marshal::PtrToStringAnsi(ptr);}

hoge[i]はhoge[5][20]のWCHARです
先頭の一文字しかTextに入っていません。どうすれば良いでしょうか?
396デフォルトの名無しさん
2011/10/29(土) 16:58:16.15
> Marshal.PtrToStringAnsi メソッド
> アンマネージ ANSI 文字列から最初の null 文字に遭遇するまでのすべての文字をマネージ String にコピーし、
> 各 ANSI 文字を Unicode に拡張します。
何故、WCHAR*を入れられると思ったのだろうか

http://msdn.microsoft.com/ja-jp/library/bb384865.aspx
397デフォルトの名無しさん
2011/10/29(土) 17:13:28.22
>>396
>アンマネージ ANSI 文字列から最初の null 文字に遭遇するまでのすべての文字をマネージ String にコピーし、
> 各 ANSI 文字を Unicode に拡張します。
どの部分がcharって意味なんですか?
ちなみにsize_t wLen = 0;errno_t err = 0;/*ロケール指定*/setlocale(LC_ALL,"japanese");/*変換*/err = wcstombs_s(&wLen, wStrC, 20, charmoji, _TRUNCATE);で直したらできました
398デフォルトの名無しさん
2011/10/29(土) 18:45:00.94
array<System::Windows::Forms::ToolStripMenuItem^>^ strips = gcnew array<System::Windows::Forms::StripMenuItem^>(5);
のstripsをフォームいじっても消えないところでグローバル宣言したいのですがどうすれば良いでしょうか?
399デフォルトの名無しさん
2011/10/29(土) 19:27:05.70
>>397
ANSI 文字列って書いてるんだから違うものを入れるなよ

しかも、文字列のマーシャリングとか>>397のリンク先を見れば一発で解決するような超FAQだから、
そんな無駄なコードなんか貼らなくていいよ
400デフォルトの名無しさん
2011/10/30(日) 00:13:45.13
>>398
クラス直下に書いとけば

そんなレベルで試行錯誤してても時間の無駄だよ
悪いことは言わないからちゃんと1から言語を勉強してきたほうがいい(C#かCLIじゃない方のC++を)
401デフォルトの名無しさん
2011/10/30(日) 00:22:47.79
arrayの内1つを消して間を詰めるにはどうしたら良いですか?
402デフォルトの名無しさん
2011/10/30(日) 00:25:17.38
無理。新しい配列を作ってコピーする。
403デフォルトの名無しさん
2011/10/30(日) 00:32:43.14
arrayって使わない方が良いんですか?
vectorとかの方が良いんですか?
404デフォルトの名無しさん
2011/10/30(日) 00:35:25.75
.NETが絡むところでvectorは使うな
動的に要素数を変えたいならSystem::Collection::Generic::List<T>を使う
もういいからC#やれ
405デフォルトの名無しさん
2011/10/30(日) 00:36:42.68
じゃあ最後にC++/CLIのメリットを教えてください
406デフォルトの名無しさん
2011/10/30(日) 00:38:40.01
マゾ御用達
407デフォルトの名無しさん
2011/10/30(日) 00:53:12.14
キモかわいい
array<Hoge^>^%はC#だとref Hoge[]で味気ない
408デフォルトの名無しさん
2011/10/30(日) 21:28:13.45
for(int i=1;i<5;i++){this->textBox1->Text += (i + ". \n");}
改行しません。どうしてでしょうか?
409デフォルトの名無しさん
2011/10/30(日) 21:39:23.47
\r\nと書かないといけないのですね
ありがとうございました
410デフォルトの名無しさん
2011/10/31(月) 01:30:07.13
WCHAR *g; *g= this->textBox1->Text->ToCharArray()[0] ;
コンパイルは通るし画面のテキストボックスにも文字はちゃんと表示されてるのに
オブジェクト参照がオブジェクト インスタンスに設定されていません とエラーが出て止まります。どうすれば良いですか?
411デフォルトの名無しさん
2011/10/31(月) 02:45:15.47
ぬるぽ
412デフォルトの名無しさん
2011/10/31(月) 02:53:26.62
ちょwwぬるぽじゃなくて教えれwww
413デフォルトの名無しさん
2011/10/31(月) 06:25:43.59
ここまであからさまなぬるぽはないわ
414デフォルトの名無しさん
2011/10/31(月) 06:27:02.15
逝ってよし
415デフォルトの名無しさん
2011/10/31(月) 08:46:35.87
まぁ、pin_ptr が何のためにあるのか、という話だな
416デフォルトの名無しさん
2011/10/31(月) 23:46:48.11
C++/CLIのプロジェクトに
C#のソースも追加出来ますが(Prof以上のみ?)、
C++/CLIからそのC#のクラスを使えますか?
C#からC++/CLIのクラスは使えるようですが・・・
417デフォルトの名無しさん
2011/11/01(火) 00:03:00.11
C#のソースは知らんが、C++/CLIから.netのクラスやら機能を使うのは.netの機能使うのと同じ
418デフォルトの名無しさん
2011/11/01(火) 00:03:25.92
プロジェクトに追加するだけなら自由だが。
混ぜてコンパイルは無理。
dllを参照して使用するのは相互に可能。
419デフォルトの名無しさん
2011/11/01(火) 00:35:20.55
やっぱ使えませんか
大人しくプロジェクト分けるしかないのですね・・・
420デフォルトの名無しさん
2011/11/06(日) 15:39:11.10
アプリ起動中にpictureBox内に矩形を表示させておきたいのですが
どこにコードを書けばいいですか?
pictureBox_Paint内だと起動直後の一瞬しか表示されません
421デフォルトの名無しさん
2011/11/06(日) 15:50:26.29
大方CreateGraphicsとか使ってるんじゃね
422デフォルトの名無しさん
2011/11/06(日) 16:39:49.74
その通りでした。ご指摘ありがとうございました
423デフォルトの名無しさん
2011/11/09(水) 16:12:12.50
インテリセンスマダー?
424デフォルトの名無しさん
2011/11/10(木) 07:34:24.84
質問です。
ネイティブ(アンマネージド)なC++の静的ライブラリを
C++/CLIでリンクして使うと変な所で死んだりするんだけど、
こういう事しちゃだめなのでしょうか?
一旦ネイティブなDLLを作って、そこを介して呼べば死なないのですが・・・。

そのライブラリは実装を隠蔽するため
クラスのインタフェース部分のみ公開して、
インスタンスの生成と開放を関数化してあるのですが、
つまりはnew/deleteがライブラリ内で実行され、
ライブラリ内でnewした結果を返し、マネージドコード内で保持し、
そのポインタをライブラリに渡してdeleteしてもらう形になっています。

よく分からないのは、わざとnewをせずポインタをNULLで初期化したままにしておき、
「NULLでなければ開放関数を呼ぶ」というコードを書いただけでも、
そこで死んでしまうのです。(NULLなので開放関数は呼ばれない!)
vectorヘッダをインクルードするかしないかで、死んだり死ななかったりと、
挙動がおかしすぎて正直よく分からない状況です。
425デフォルトの名無しさん
2011/11/10(木) 16:05:38.55
ファイナライザが別スレッドから呼ばれるからとかじゃない
426デフォルトの名無しさん
2011/11/12(土) 18:54:13.34
using使ってるのでそこは大丈夫だと思います
427デフォルトの名無しさん
2011/11/12(土) 23:05:46.09
(gcnew Form1)->Show();
で作成されたフォームに
元のフォームにある文字列変数を渡す方法があったら教えてください
428デフォルトの名無しさん
2011/11/12(土) 23:10:34.52
コンストラクタの引数で渡すかプロパティ定義して渡す
つかそれだとC#もC++もさっぱりだよね? ならまだ遅くないから今すぐC#に乗り換えること。
429デフォルトの名無しさん
2011/11/13(日) 20:42:15.74
FindWindow で探すとか、EnumWindow でタイトルを調べるとか?
430デフォルトの名無しさん
2011/11/13(日) 21:12:34.82
Showする前に渡せば良い
431デフォルトの名無しさん
2011/11/13(日) 21:53:59.80
同じアプリ内でしかも.NETのフォームでFindWindow/EnumWindowとかアホか
432デフォルトの名無しさん
2011/11/17(木) 00:53:02.53
オブジェクトとメンバ関数名を与えられたときに、その関数を呼び出すことはリフレクションを介して簡単にできますが、
指定された名前のグローバル関数を呼び出すことは可能ですか?
433デフォルトの名無しさん
2011/11/17(木) 01:19:51.91
.NETでグローバル関数なんて使うもんじゃない
クラスの静的メンバにする
434デフォルトの名無しさん
2011/11/17(木) 01:37:36.37
ですよねー。
435デフォルトの名無しさん
2011/11/17(木) 14:05:35.23
グローバル関数なんて無かったんや!
436デフォルトの名無しさん
2011/11/23(水) 22:13:47.85
自作したグローバル関数を書くのはどこが一番よろしいですか?
プロジェクト全体でつかうような関数です。
stdafx.hに書いたら

error LNK2005: "int __clrcall testfunc(void)" (?testfunc@@$$FYMHXZ) は既に stdafx.obj で定義されています。

ってエラーが出るのですが( ;∀;)
437デフォルトの名無しさん
2011/11/23(水) 23:10:37.60
そらそうだろ
C++/CLIというか、C++の基本から勉強し直してこい
438デフォルトの名無しさん
2011/12/07(水) 06:58:01.68
インクルードガード
439デフォルトの名無しさん
2011/12/07(水) 07:29:07.57
関数にstaticかinlineつけて内部結合にするがよろし
440デフォルトの名無しさん
2011/12/07(水) 15:36:45.42
ガードしても意味無いだろ。
別々のソースでインクルードされてコンパイルして、
それらをリンクしたら同じ名前の関数が複数出来上がってるわけだし。

と、ついでに質問者に説明してみる
441デフォルトの名無しさん
2011/12/07(水) 18:59:29.54
>>440
スマヌ
442デフォルトの名無しさん
2011/12/12(月) 18:04:16.59
あるサイトを参考にUnicodeからshift_jisに代えようとしてるんですが以下のコードで
cli::array<unsigned char^>^ ToShiftJis(System::String ^ unicodeStrings)
{
System::Text::Encoding^ unicode = System::Text::Encoding::GetEncoding(1200);
cli::array<unsigned char>^ unicodeByte = unicode->GetBytes(unicodeStrings);
System::Text::Encoding^ s_jis = System::Text::Encoding::GetEncoding(0);
cli::array<unsigned char>^ s_jisByte = System::Text::Encoding::Convert(unicode,s_jis,unicodeByte);
cli::array<unsigned char^>^ s_jisChars = gcnew cli::array<unsigned char^>(s_jis->GetCharCount(s_jisByte,0,s_jisByte->Length));
s_jis->GetChars(s_jisByte,0,s_jisByte->Length,s_jisChars,0);
return s_jisChars;

}
をビルドすると
error C2664: 'int System::Text::Encoding::GetChars(cli::array<Type> ^,int,int,cli::array<wchar_t,dimension> ^,int)' : 4 番目の引数を 'cli::array<Type> ^' から 'cli::array<Type,dimension> ^' に変換できません。
とエラーが出るのですが、どうすればよいのでしょう
どなたかご教示ください。
443デフォルトの名無しさん
2011/12/12(月) 21:18:25.11
MFC の CString 使ったら?
444デフォルトの名無しさん
2011/12/13(火) 04:07:52.11
Encoding.GetChars()ってChar[]とるんじゃないのか?
関係ない型をボックス化して何がしたいの?
というか、Encoding.Convert()の時点で既にSJISになっているし
445デフォルトの名無しさん
2011/12/13(火) 13:58:16.46
Hoge hoge[x];
の要素数はsizeof(hoge)/sizeof(hoge[0])で取得できますが
Hoge *hoge=new Hoge[x];
の要素数はどうやって取得すればいいですか?
446デフォルトの名無しさん
2011/12/13(火) 17:05:42.47
>>442
unsigned charに ^ は要らないと思うが
447デフォルトの名無しさん
2011/12/13(火) 20:58:34.89
>>445
ネイティブ配列のサイズは自分で変数や定数で覚えとくのが基本
というかC++/CLI関係ないだろ
448デフォルトの名無しさん
2012/01/13(金) 18:39:32.59
System::Stringからchar*に変換する関数を書きました。
半角256文字以上のテキストを投げると、255文字+\0でめられてしまいます。
下記をどのように修正すればいいでしょうか?

#include <msclr/marshal.h>
inline char* toPtChar(const String^ Text)
{
String^ temp = (String^)Text;
msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context();
return (char*)(context->marshal_as<const char*>(temp));
}
449448
2012/01/13(金) 18:45:03.89
>半角256文字以上のテキストを投げると、255文字+\0でめられてしまいます。

半角256文字以上の文字列を投げると、255文字+\0で丸められてしまいます。
2000文字程度変換できれば良いのですが、

の間違いです。すみません。
450448
2012/01/13(金) 19:43:34.29
関数を以下のように書き換えてSystem::String→char*しても、
やはり256文字以上は消えてしまいます。
関数ではなく、何か他に原因があるんでしょうか?

#include <msclr/marshal.h>
using namespace msclr::interop;
using namespace System::Runtime::InteropServices;
char* toPtChar(const String^ Text)
{
String^ foo = (String^)Text;
IntPtr ptr = Marshal::StringToHGlobalAnsi(foo);
return (char*)ptr.ToPointer();
}
http://is.gd/BgDTis
451デフォルトの名無しさん
2012/01/16(月) 10:35:10.44
http://www.cetix.de/DotNetNews/Thread61630-String_to_string_-_truncates_at_255.aspx
これか?
試してないけど。
452デフォルトの名無しさん
2012/01/18(水) 17:31:31.29
   ◢▀▅     ▃
     ▋    ▋  ◢▀ ▀◣
    ▌     ▌ ▌     ▌
     ▌    ▌ ▌    ▌
    ▐      ▌ ▌     ▌
     ▐     ▀■     ▌
   ◢◤         ▀▃
  ◢◤             ◥◣
  ▌              ▌
 ▐   ●       ●    ▌      馬鹿にはコピペできないの。
  ▌              ▌
  ◥◣      ╳       ◢◤
   ◢▀▅▃▂   ▂▂▃▅▀▅
 ◢◤    ▀▀▀▀▀     ◥◣
▐◣▃▌           ▐▃◢▌
◥◣▃▌            ▐▃◢◤
  ▀▅▃          ▂▅▀
     ▀■▆▅▅▅▆■█▀
     ▐▃▃▃▲▃▃▃◢▍
453デフォルトの名無しさん
2012/01/18(水) 17:32:09.47
   ◢▀▅     ▃
     ▋    ▋  ◢▀ ▀◣
    ▌     ▌ ▌     ▌
     ▌    ▌ ▌    ▌
    ▐      ▌ ▌     ▌
     ▐     ▀■     ▌
   ◢◤         ▀▃
  ◢◤             ◥◣
  ▌              ▌
 ▐   ●       ●    ▌      馬鹿にはコピペできないの。
  ▌              ▌
  ◥◣      ╳       ◢◤
   ◢▀▅▃▂   ▂▂▃▅▀▅
 ◢◤    ▀▀▀▀▀     ◥◣
▐◣▃▌           ▐▃◢▌
◥◣▃▌            ▐▃◢◤
  ▀▅▃          ▂▅▀
     ▀■▆▅▅▅▆■█▀
     ▐▃▃▃▲▃▃▃◢▍
454デフォルトの名無しさん
2012/01/18(水) 18:05:42.86
日本の国民の中には、外国の事情がある程度分かっている人を除けば、
放送内容を信頼している人がまだいることは確かだ。一方で、ネット
住民たちのほぼ全員が、放送番組には政府の意図が色濃く反映されて
いることを知っている。自分の国がどういう国かということが、よく
分かるようになってきているのだ。
455デフォルトの名無しさん
2012/01/20(金) 23:34:30.86
失礼します。色々まわっていたのですが此方を勧められたので此方でも質問させて頂きます。

VC++でWindowsフォームのプログラムを組んでいるのですが、
別ファイルでextern宣言したクラス(の配列)をform1.h等で参照したいのですがコンストラクタが上手く働いてくれないのか、宣言の場所が悪いのか
ゴミ値ばかりで上手く動作してくれません。
何かヒントもらえませんか?
456デフォルトの名無しさん
2012/01/21(土) 02:53:36.13
ソース貼るか
エラー貼るか
何かヒントもらえませんか?
457デフォルトの名無しさん
2012/01/21(土) 23:51:21.19
いきなりcharではなくwchar_tに変換
でWinAPI使ってcharに
458デフォルトの名無しさん
2012/01/22(日) 11:17:33.74
>>455
コードも何も書かれてないから憶測でしかないが、newとgc_newを使い分けてないとか、*と^を使い分けてないとか、その辺じゃない?
後は配列が.netのクラスをちゃんと継承してないとか
生のC++とC++/CLIは全くと言って良いほど別言語で、でも生のC++も使えちゃうからC#とC++の合わせ技より罠が多く、バグが多くなり易いよ

459デフォルトの名無しさん
2012/01/23(月) 11:32:22.34
publicにしてないとか
460デフォルトの名無しさん
2012/01/23(月) 12:35:15.69
dll が違うとか
461デフォルトの名無しさん
2012/02/21(火) 23:29:28.14
VC++のプロジェクトのwindowsフォームアプリでOpenMPって使えないんですかね?
'/clr:pure' と '/openmp' は同時に指定できません
ってエラーが出てるんで、CLIでは使えないのかな?とか思ったりしたんですがどうでしょう
462デフォルトの名無しさん
2012/02/21(火) 23:38:46.12
/clr:pureで使えるわけがないだろネイティブコード入れられないんだから
/clrならどう?
っていうかWindowsフォーム使いたいだけだったら終わってるC++/CLIなんてやめて
C#でGUI作って重い計算だけC++(/CLIでない)で書いてC#から呼んだほうがいいよ
463デフォルトの名無しさん
2012/02/24(金) 20:06:17.85
>>461 です
/clrならできました。ありがとうございます。
よくわかっていないのですが、/clr:pureにしていたのはネイティブとごっちゃになって
変なことになるのを防ぐためなんですかね?だから/clrとしてもそこらへんを気をつければ
問題ない、ということでいいんでしょうか?
C++/CLIは初めてなんで、どう”終わってる”のかわかりませんが、C#はやったことが無いので、
できればこっちでやりたいところなんです。
464デフォルトの名無しさん
2012/02/24(金) 20:20:54.26
大丈夫だ、C++経験者からしてもC++/CLIの習得よりC#の習得の方が楽だから
465デフォルトの名無しさん
2012/02/24(金) 20:21:49.18
/clr:pureだとアセンブリにネイティブコードが混ざらない。
ネイティブコードを混ぜないC++/CLIなんて存在価値ゼロだから、C++/CLI使うんなら常に/clrでおk。
C#をやれ。いくらC++の経験があろうが関係ない。間違いなくC#の方が早く使えるようになるし
開発効率に天と地ほどの差がある。C++/CLIはMSに完全に見捨てられている技術。
466デフォルトの名無しさん
2012/02/24(金) 20:25:20.13
VS2010ではもうインテリセンスすら付けてくれてないもんね
467デフォルトの名無しさん
2012/02/24(金) 21:09:13.08
C#やってみます。
過去のレス見てきたんですけど、ひどい言われようですね
あと、あんま書き込み無いのにレスは早くて面白かったです。
468デフォルトの名無しさん
2012/02/27(月) 08:13:52.05
いろいろと屈折した愛があるからなw
469デフォルトの名無しさん
2012/02/29(水) 02:03:40.75
俺はこのスレに張り付いてるけど一応ちょっと待ってからレスしてるわ
470デフォルトの名無しさん
2012/03/02(金) 07:33:50.86
呼び出し規約がよくわからないのですが、関数を宣言した場所で明示しない場合
・引数・返り値の型にマネージ型が含まれる→__clrcall になる
・含まれない→__stdcall になる。実装がマネージドコードにコンパイルされると、double-thunkingになる
という理解であっているでしょうか。

また、非マネージ型のメンバ関数においては、
managed-code -> __thiscall stub -> __clrcall のような double-thunking が発生するのでしょうか?
471デフォルトの名無しさん
2012/03/07(水) 16:17:15.87
VS11βでもインテリセンス無いかな?
472デフォルトの名無しさん
2012/03/08(木) 00:59:01.93
今ちょっと打ってみたが効くみたいだよ。
473デフォルトの名無しさん
2012/03/13(火) 21:11:04.75
C1001 が出た。
みんな報告してる?
474デフォルトの名無しさん
2012/03/14(水) 04:07:10.11
可能な限りする
475デフォルトの名無しさん
2012/03/14(水) 11:15:03.77
やっぱそうだよな。VS11Betaで試してconnect行くわ。
476デフォルトの名無しさん
2012/03/15(木) 09:53:47.89
VS11betaでもやっぱりIntellisSense効かなくて
"No additional information available"って言われるんだけど
何が悪いんだろう

ButtonとTextBox置いてButtonのイベントハンドラの中で
textBox1->とかやってるだけなんだけど
最初のt打っただけで上のエラーが出て
->まで打ってもエラー出たままでメンバも表示されない
477デフォルトの名無しさん
2012/03/15(木) 20:40:01.46
http://homepage3.nifty.com/ishidate/vcpp10_20/vcpp10_20.htm
ここの一番下の図5は図6用の計算式はどの様に記入すれば良いのですか。
478デフォルトの名無しさん
2012/03/16(金) 10:49:25.88
function1のとこだろ
どう考えてもC++/CLIでやるべきことじゃないよなこれ
内容は凄いのに…C#にすれば…
479デフォルトの名無しさん
2012/03/18(日) 11:04:51.87
おお、派手だなw
.net framework 使いたいだけならC#でいいなーほんとに
480デフォルトの名無しさん
2012/03/18(日) 12:14:54.13
eのこと聞いてんのかな?
Math::Exp() にすりゃいいと思うが、、、、
481デフォルトの名無しさん
2012/03/20(火) 20:55:02.08
こういう変に優秀な勘違いがいるからC++/CLIに手を出す奴がいなくならないんだよな
C++/CLIの記事や書籍ってC#やVBに比べて妙に良質だったりするし
482デフォルトの名無しさん
2012/03/21(水) 00:15:02.30
C/C++では配列の終端の一つ次を指すポインタは有効なポインタだったのですけど、
マネージ配列の終端の一つ次を指す interior_ptr は配列がGCで移動したときに正常に更新されますか?
483482
2012/03/25(日) 13:00:47.00
いまさらですが、試してみたところ正常に移動するようでした。
484482
2012/03/26(月) 18:19:27.80
(勝手な推測ですが) interior_ptr はハンドルとオフセットのペアで実装されているのではないかと思います。

array<int> ^a;
auto pa = &a[3]; // { a, 12 }

int *p;
interior_ptr<int> ip (p); // { nullptr, p }

ところで、長さ 0 の配列 (b) に対して &b[0] は IndexOutOfRangeException なんですね…。困った困った。
485デフォルトの名無しさん
2012/03/26(月) 21:59:14.05
配列でinterior_ptrなんて必要?
君が言ってるように常に配列のハンドルとオフセットをペアにしとけばよくね
interior_ptrってクラスのインスタンスフィールド指すのに使うやつでしょ
486デフォルトの名無しさん
2012/03/27(火) 07:37:57.33
既存コードの一部だけマネージに持っていく実験なので。
*& はできても interior_ptr<T>% はできないので、配列 + オフセットの方が便利なのはその通りです。
487デフォルトの名無しさん
2012/05/27(日) 20:25:49.04
引数としてstring型の配列を用いたいのですが・・・
自分C#しかやったことないので・・・
488デフォルトの名無しさん
2012/05/27(日) 20:28:19.00
void foo(cli::array<System::String^> ^bar);
489デフォルトの名無しさん
2012/05/27(日) 20:33:46.88
Thank you sir.
490デフォルトの名無しさん
2012/05/31(木) 15:51:08.78
cli::array<System::String^> ^hoge を char* hogehoge[] に変換したいのですが・・・
491デフォルトの名無しさん
2012/05/31(木) 16:43:56.11
>>490
http://ideone.com/XGbqa
492491
2012/05/31(木) 17:00:23.87
すまん、コンストラクタが例外安全でなかったので修正した
http://ideone.com/xbcbh
493デフォルトの名無しさん
2012/05/31(木) 17:15:25.25
全然わかんね
494デフォルトの名無しさん
2012/05/31(木) 17:26:57.22
cli::array<System::String^> ^hoge = ...;
char_pp p(hoge);
char** hogehoge = p.get();

ってことなんだが

char** は char* xxx[] を引数に取る関数にそのまま渡していい
495デフォルトの名無しさん
2012/05/31(木) 18:36:01.89
Hmm...
496デフォルトの名無しさん
2012/05/31(木) 18:57:30.99
補足しておくと
・PtrToStringCharsで内部ポインタを取得
・System::Stringはunicodeなのでwcstombs_sでマルチバイト文字列に変換
・std::auto_ptr, std::vector, char_ppはRAIIイディオムにより例外安全にするため
・try{}catch(...){throw;}もchar_ppコンストラクタを例外安全にするため
用語はググってくれ

もしC++初心者で.NETからよそのライブラリ使いたいとかなら
C#からP/Invokeした方が多分楽
497デフォルトの名無しさん
2012/05/31(木) 19:02:53.62
P/Invokeですか・・・
498デフォルトの名無しさん
2012/06/01(金) 00:26:18.04
そんなコード書かれたら、俺なら普通に書き直しさせるわ
文字列のマーシャリングで標準のマーシャリング以外を使うなよ

marshal_context c;
for (...) native_str[i] = c.marshal_as<char*>(managed_str[i]);
499デフォルトの名無しさん
2012/06/01(金) 03:21:17.29
それコンパイル通るの?
500デフォルトの名無しさん
2012/06/01(金) 15:18:44.76
MFC 使うんだったら、CString に直接放り込めばいいだろうに
CString strBuff(strManaged);
501sage
2012/06/08(金) 17:29:51.46
VC++2008のC++/CLIでUSBカメラが抜かれたことを検知したいのですが,どなたかわかりませんか?
USBメモリーなら
virtual void WndProc(System::Windows::Forms::Message% m) override
{
if(m.Msg == WM_DEVICECHANGE)
{
switch((int)(m.WParam))
{
case DBT_DEVICEREMOVECOMPLETE:
MessageBox::Show("out");
break;
case DBT_DEVICEARRIVAL:
MessageBox::Show("in");
break;
}


}

Form::WndProc(m);

}
で判断できたんですが,USBカメラだとm.Wparamが変化しません...
502デフォルトの名無しさん
2012/06/09(土) 12:49:43.11
c++を使い始めたものなんですけど

こっちはちゃんとなるんですけど
くだすれC++/CLI(初心者用)part2YouTube動画>1本 ->画像>4枚

includeを使うと
くだすれC++/CLI(初心者用)part2YouTube動画>1本 ->画像>4枚


こんな感じになっちゃって・・・(´;ω;`)


だれか解決して下さいませんか?
503デフォルトの名無しさん
2012/06/09(土) 12:58:27.44
苦Cか
504デフォルトの名無しさん
2012/06/09(土) 13:00:34.24
>>503
正解
あれはとてもためになります
ところで
対処の方法は?
505デフォルトの名無しさん
2012/06/09(土) 13:20:04.01
まずスレタイを読みます
506デフォルトの名無しさん
2012/06/09(土) 13:21:59.00
>>505
読みました
さようなら
507デフォルトの名無しさん
2012/06/09(土) 13:40:18.44
わろた
508デフォルトの名無しさん
2012/06/19(火) 22:37:50.62
DOSで趣味でプログラム組んでた程度で、APIめんどくせ、MFCうぜえってレベルなんだが
久しぶりにちょっとしたゲームでも作ろうとして
VCに無料版があるのか!と飛びつき
無料版でフォームの統合環境まであるんか、今はMFCにかわってCLRなんかと早とちりし
ネット漁ればサンプルやら何やらゴロゴロしてるかと思えば…
何じゃこりゃ
509デフォルトの名無しさん
2012/06/19(火) 23:16:03.51
CLRってなんだよ。CLIはMicrosoftにも見捨てられかけてるのでね…泣けてくる。
どうせ.NET使うならもうC#で全部やっちまえよって感じか?
510デフォルトの名無しさん
2012/06/20(水) 01:01:15.51
CLIは規格の名前、それのMSによる実装がCLR
CLRに大量のライブラリ群を加えたやつが.NET Framework

CLIに対応する構文を追加したC++だからC++/CLI

>どうせ.NET使うならもうC#で全部やっちまえよって感じか?
その通り。過去の資産を使わないといけないというような、必要に迫られて仕方なく使う物だよ。
511デフォルトの名無しさん
2012/06/20(水) 01:14:40.12
ところでVC++のC++/CLIってMS CLRじゃなくて純粋なCLIで動くの?
一応CLIではアセンブリはネイティブイメージを持てるという決まりだった覚えがあるけど
細かい相互運用のことは決まってなさそう
512デフォルトの名無しさん
2012/06/20(水) 03:37:32.95
C++/CLIをMonoで動かそうとするとCRT使えない&/clr:pureだったよね。今は変わったのかな?
513デフォルトの名無しさん
2012/06/20(水) 07:32:37.59
>>508
そういう用途だったら、C#おすすめだけどね。
プロトタイピングに最適!
514デフォルトの名無しさん
2012/06/20(水) 11:20:48.23
/clr:safe だね。

using namespace System;
int main(array<String^>^ args) {
  Console::WriteLine("Hello World !");
}

cl /clr:safe test.cpp
mono test.exe
でいける。
515デフォルトの名無しさん
2012/06/24(日) 02:05:59.36
http://www.atoker.com/blog/2012/04/12/llvm-europe-2012-cli-compiler/
ClangベースにC++/CLIコンパイラ作ったという話。
(1)と(2)とあるけど、どちらもVisual C++の吐く
混在アセンブリとは違う仕組みっぽい感じがする。
516デフォルトの名無しさん
2012/06/24(日) 20:35:21.91
VC++のclrで,ref classはなぜref classからしか継承できないんでしょうか?
仕組み的に継承先でgcとか実装されるなら別にvalue classからとかでも継承できていいと思うんですけど……
517デフォルトの名無しさん
2012/06/24(日) 22:14:12.48
というか普通のクラスをpublic refで継承したいのおおおお
518デフォルトの名無しさん
2012/06/25(月) 11:36:44.70
継承出来ても仕組み上ハンドル変数にしか入れられないから意味なくね
519デフォルトの名無しさん
2012/06/25(月) 15:36:06.92
構造体がなんかインターフェイスを実装してる場合には意味ないこともないが
CLIを拡張するのに見合った利益があるかどうか考えると当然切り捨てだろうな
あくまでC#とVBが主役なんだからC#やVBから使えないクラス作っても意味ない
520デフォルトの名無しさん
2012/06/25(月) 18:42:31.48
混合型ェ・・・
521デフォルトの名無しさん
2012/06/25(月) 22:06:41.59
混合型こそ仕組み的には特にできない理由がなくて比較的大きな利益のあるものだよな
CLIやCLRを弄る必要もなく、コンパイラだけで対応できるはず
永遠に将来的に対応予定だが
522デフォルトの名無しさん
2012/06/26(火) 10:12:49.68
いや仕組み的に無理だから

マネージド領域のポインタはfixedなしに取得してはいけない
実装部分でそれを止める(無いことを保証する)には宣言部分で付加情報が必要
それがrefキーワード

ヒープ領域ならポインタを取得するのは問題ない
だからrefクラスのメンバにポインタ型なら定義可能
コンストラクタでnewしてCLIデストラクタ(IDisposable)でdeleteすること
523デフォルトの名無しさん
2012/06/26(火) 10:13:55.17

template <typename T> ref class ref_auto_ptr{
   T* p;
public:
   ref_auto_ptr(T* ap):p(ap){}
   ~ref_auto_ptr(){delete p;}
   T* get(){return p;}
};

struct val_class{
   val_class(){Console::WriteLine(L"new val_class");}
   ~val_class(){Console::WriteLine(L"del val_class");}
};

ref class ref_class{
public:
   ref_class():p(new val_class()){}
   ref_auto_ptr<val_class> p;
};

int main(array<System::String ^> ^args){
   ref_class c;
   Console::WriteLine(L"a");
   return 0;
}
-----------------
new val_class
a
del val_class
524デフォルトの名無しさん
2012/06/26(火) 12:26:48.81
仕組み的に無理って
C++/CLI のもともとの目的は混合型を実現することだったんじゃなかったか?
525デフォルトの名無しさん
2012/06/26(火) 16:07:00.24
Some Notes about Mixed Types
http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx
526デフォルトの名無しさん
2012/06/26(火) 22:12:26.16
PODなネイティブ構造体をマネージ型に置いたり、マネージハンドルをメンバに持たない
マネージ構造体をネイティブ型に置いたりするのは別に問題ないが(ミスを誘発しやすいという懸念はあるが)
もっと一般的に混合型を扱えるようにする構想があったからとりあえず全部禁止しといたってことか
で結局はC++/CLIそのものが見捨てられて計画倒れになり、理不尽な制限として残ってしまったと
527デフォルトの名無しさん
2012/06/27(水) 03:22:10.94
ちょっとした配列をメンバに持ちたいときにmallocしたりgcnewしたりしないといけないのは
なんとかならんかったんかなぁ、と思う。
528デフォルトの名無しさん
2012/06/27(水) 08:24:51.05
>>525
Point* G(R^ r) {
pin_ptr<Point> pinp = &r.p;
return pinp;
}
これってGCの問題というよりはC++でもよくあるミスの一種だよね
ローカル変数のポインタを残すなってのと同類
529デフォルトの名無しさん
2012/06/27(水) 10:51:13.99
初心者みたいな質問ですがすみません。

今、マネージコードからネイティブなコードを呼び出す ということがやりたいのですが
例えば、native_program.hを
#pragma unmanaged
int func(int num){
return num*2;
}
のように書き、Form.hで
#include "native_program.h"
(中略)
int num2 = func(50);
(後略)
のように呼び出しても、マネージコードでは呼び出せませんのようなエラーが出て上手くいきません。
1つのプロジェクト内で、ネイティブコードも書きながら、#pragma unmanagedを使って
コンパイルするというのは無理なのでしょうか?
http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_02.html
ここにあるようにdll化して呼び出すということをしないとダメなのでしょうか。
これだとデバッグが大変なので、1つのプロジェクト内やりたいのですが・・・・

よろしくお願いします。
530デフォルトの名無しさん
2012/06/27(水) 10:57:39.47
include ってそこに書いたのと同じ意味になるんだがそれはわかってる?
531デフォルトの名無しさん
2012/06/27(水) 13:42:46.79
>>530
小一時間考え、
#include "native_program.h" の下に #pragma unmanaged を入れたら通りました・・・お騒がせしました

ところで、func()は実際はクラスの中に入ってるのですが、
呼び出し側では、
Classname* classname;
classname->func();
のようにすればOKなのでしょうか。この2行はマネージコードの中に入ってるけど
特にnewとかしなくても上の一行だけでクラスのオブジェクト作られてるのかなと・・・
というか、このように書いたら動いたのでOKなのかなと思ってるのですが。
532デフォルトの名無しさん
2012/06/27(水) 13:43:46.48
失礼、#pragma managedです。。。
書き間違いました^^;
533デフォルトの名無しさん
2012/06/27(水) 14:15:48.48
オブジェクトは無いだろう。
thisポインタがNULLのまま
534デフォルトの名無しさん
2012/06/27(水) 14:23:15.98
オブジェクトはないけど動いている・・・
ということは、実行ファイルを直接読んでるということか・・・
よくわからないし動いてるので気にしないことにします^^;

失礼しましたw
535デフォルトの名無しさん
2012/06/27(水) 14:24:02.48
>>531
Classname classname;
classname.func();
ならOK
536デフォルトの名無しさん
2012/06/27(水) 14:50:42.50
まあ素直にstaticつけようぜ
537デフォルトの名無しさん
2012/06/27(水) 15:05:30.83
なんで動いてるか気持ち悪かったのでやっぱりnewとdelete追加しときましたw

>>535
それだとコンパイルする人がエラー出しますね

>>536
やっぱ暗黙的に静的インスタンス?みたいなの作られてて、それのポインタになるんですかね
実体がなかったら動くわけないし。
デバッガでみたらポインタは未定義の値みたいになってましたけど
538デフォルトの名無しさん
2012/06/27(水) 15:12:22.35
仮想関数じゃねーんだから、実体があるとかどうとか関係無い。
単に関数呼んでるだけだ、未定義のthisポインタでな。
539デフォルトの名無しさん
2012/06/27(水) 15:24:21.57
>>537
>実体がなかったら動くわけないし
ところがCやC++では動く。
速度重視のため、安全確保のための自動チェックなどは行われない。
そしてメンバ変数に代入すると何処とも知れないメモリアドレスを書き換えて
所謂セキュリティホールになったりする。
メモリアクセス違反で強制終了するのはまだ良い方。
540デフォルトの名無しさん
2012/06/27(水) 15:30:07.51
>>539
いあいあ、実体というか、どこかに機械語のコードがなかったら動くわけないですよね?
その場所がわからないとうか、管理されてないというかんじなのかな?
OSが管理してて、そのOSによるということなのかなあ
541デフォルトの名無しさん
2012/06/27(水) 15:35:31.60
しったかしてるから初心者みたいな勘違いしたままなんだよ
542デフォルトの名無しさん
2012/06/27(水) 15:36:54.37
>>540
まず「ヒープ」「スタック」「コードセグメント」あたりの
基礎から勉強すべき
543デフォルトの名無しさん
2012/06/27(水) 15:44:18.84
C++/CLIってC++と.NET両方の知識がある人向けだから
そうでない人はC#でP/Invokeを使った方がいいと思う。
544デフォルトの名無しさん
2012/06/28(木) 01:46:27.01
今更だけど、pragma managed も push pop できたと思うよ。
545デフォルトの名無しさん
2012/06/28(木) 09:51:50.05
まあヘッダに入れてるしC++勉強始めて3日くらいの知識でC++/CLIとごっちゃで勉強すると
後で困ると思うがなあ
546デフォルトの名無しさん
2012/07/03(火) 11:14:40.00
VisualC++の入門書を買って来たらC++/CLIの本だったのは良い思い出・・・
547デフォルトの名無しさん
2012/07/03(火) 14:15:43.34
「シー教えてくれ」と言われ見たらC#
548デフォルトの名無しさん
2012/07/04(水) 11:10:26.99
そのときの「シー」は半音上がってたんだろうw
549デフォルトの名無しさん
2012/07/08(日) 14:06:13.60
>>548
うまいw
550デフォルトの名無しさん
2012/07/13(金) 12:10:27.73
C++/CLI で暗黙のバッキングストア使うとき、get/setで異なるスコープにすることはできますか?
C# であれば public Hoge { get; protected set; } のような感じで。

ちなみに今使っているのはVS2008です。
551デフォルトの名無しさん
2012/07/13(金) 21:51:43.58
出来るよ。

ref class Clazz
{
  property int XXX
  {
  private:
    void set(int iA);
  public:
    int get();
  }
};
552デフォルトの名無しさん
2012/07/13(金) 22:09:27.40
>>551
ありがとー。
本体を書かなければ自動生成されるんですね。いわゆるWeekシンボルってやつかな。

>>550
× public Hoge { get; protected set; }
○ public int Hoge { get; protected set; }
553デフォルトの名無しさん
2012/07/19(木) 19:16:48.08
XmlTextReaderでxmlファイルを読み込むとき,ファイルがあるかないかの判別はどうすればいいですか?
554デフォルトの名無しさん
2012/07/19(木) 19:22:48.77
例外見ればいいだろ
555553
2012/07/19(木) 19:31:55.14
msdnにあるFileNotFoundExceptionを使うのでしょうか?
使い方がいまいちわかりません・・・
恐縮ですができればサンプルコードを書いていただけませんか?
XmlTextReader^ reader = gcnew XmlTextReader( "sample.xml" );
556デフォルトの名無しさん
2012/07/19(木) 21:32:34.53
XmlTextReaderのコンストラクタを直接触るのは非推奨
try { XmlReader^ reader = XmlReader.Create( "sample.xml" ); }
catch (FileNotFoundException^ ex) { Console::WriteLine("ファイルが見つかりません。"); }
C++/CLIは君みたいな人が足を踏み入れるようなもんじゃないし
頑張ったところで特にメリットもない
今すぐC#かネイティブのC++へ移行することを強くお勧めする
557556
2012/07/19(木) 21:37:22.99
C#とごっちゃになってた
XmlReader::Createの間違い
558553
2012/07/19(木) 22:01:25.04
>>556-557
ご回答ありがとうございます 助かりました
基礎ができていないのは痛感しております・・・
もしおすすめの参考書があれば教えていただけると幸いです・・・
559デフォルトの名無しさん
2012/07/19(木) 22:11:53.24
悪いことは言わん
どうしてもC++/CLIを使わないといけないのなら、まずはC#を覚えるのが近道だ
C#なら入門者向けの書籍やサイトなどもいくらでもあるし、
C++/CLIの.NETの部分はC#もどきの劣化版にすぎない。
560553
2012/07/20(金) 00:50:32.54
>>559
なるほど・・・
しかし今作っているプログラムを作り直す時間がありませんので
ひと段落してからC#の勉強をしたいと思います・・・
ありがとうございました.
561デフォルトの名無しさん
2012/07/20(金) 10:49:26.48
なぁ、実際C++/CLIの利点て具体的にどうなの?
C++で作ったライブラリもユニコード使用でないとオーバーヘッドかかるし
.NET側にC++クラスのオブジェクトを入れるとポインタ使用になるし。
まぁ、パソコンも進化続けるから、アプリの重さも気にはなくなるだろうけど。
562デフォルトの名無しさん
2012/07/20(金) 11:24:54.04
ホスト:アンマネージ、プラグイン:.NETの場合は、C++/CLIなしでやろうとすると
COMを経由してCLRをホストしたりとかクソ面倒臭い
.NETからC++のクラスを使いたい場合、C++/CLIではなくDllImportを使うとなると
いったんC向けのフラットなインターフェイスにラップしてやらないといけなくてクソ面倒臭い
どっちにしろC#とアンマネージC++を両方使う場合にのみ役に立つ
563デフォルトの名無しさん
2012/08/02(木) 20:07:41.60
質問させて下さい。
visual studio 2005でC++/CLIを用いて開発を行なっています。
ref struct AA
{
 public:
  int a1;
}
refクラスの上記のような構造体を定義してそのオブジェクトを2つ作り、
AA a, aa;
a = aa;    (例なので初期化せずに代入しています)
とすると「error C2582; 'operator '=' 関数を 'AA' で使用できません」となってしまいます。
実際にはrefクラスの構造体を引数として渡したかったのですがC2664になってしまいビルドが通りませんでした。
そこで一番単純な構造体の代入コードを記述したところ、上記のようなエラーとなりあました。
いろいろ調べてみると、refクラスはコピーインスタンスとコピー代入演算子をデフォルトで自動生成しない
ということが原因かと考えたのですが対策が思いつきません。

refクラスの構造体の代入とコピーの方法をご教授いただければ幸いです。よろしくお願い致します。
564デフォルトの名無しさん
2012/08/02(木) 20:16:58.19
で、値をコピーしたいの? 参照だけで良いの?
value struct AA じゃ駄目?
^は知ってる?
565563
2012/08/04(土) 11:12:00.62
>>564
レスありがとうございます。
私の勉強不足のため、クラスライブラリ側の宣言はref structで宣言しないとダメだと思い込んでいました。
しかも、クラスライブラリ以外のプロジェクトでも同様の結果になるため、勝手に環境の説明を省いてしまいました。
申し訳ありません。
ご指摘の通り、value structにすることで解決できました。ありがとうございました。
566デフォルトの名無しさん
2012/08/07(火) 23:03:24.56
PathCombainのstd::string版ってないですかね?
567デフォルトの名無しさん
2012/08/09(木) 09:35:42.88
この本って古本で定価の倍でも買う価値あります?

実践C++/CLI 極めるための基礎と実用テクニック
http://www.amazon.co.jp/dp/4797336277/

最近、DirectXをWPFから呼び出す必要が出てきて……
でも、VS2012と.NET4.0が出たときに
新しい本がいろいろ出版されるような気もしますよね……
568デフォルトの名無しさん
2012/08/09(木) 12:10:48.40
2012は4.5だ
569デフォルトの名無しさん
2012/08/09(木) 18:33:32.45
>>567
SlimDXを使うか、読めば足りるんじゃないか。
570デフォルトの名無しさん
2012/08/10(金) 10:02:39.92
使いたいDirectXの機能によっても代わるよなぁ
571デフォルトの名無しさん
2012/08/10(金) 13:32:29.83
> マイクロソフトから、お客様のアプリケーションがたくさんの人々の目に触れ、
> 試用および購入されるのをサポートする、新しい特典をお知らせいたします。
> MSDN サブスクライバーであるお客様は、1 回のご購入で 12 か月有効な
> Windows ストアおよび Windows Phone の開発者アカウントを取得すること
> ができます。

AzureはVLで買っても契約期間分使えるのに(厳密にいうと少し違うが)、
これはVL(2or3年)で買ってると悲しいな。
572デフォルトの名無しさん
2012/08/10(金) 13:34:07.44
テラ誤爆…サーセン
573デフォルトの名無しさん
2012/08/10(金) 14:19:24.98
http://toro.2ch.net/test/read.cgi/tech/1323588154/672
574デフォルトの名無しさん
2012/08/11(土) 01:18:09.35
(;´д`)アアン
575すとら
2012/08/14(火) 03:35:57.72
VS2010でフォームアプリの勉強をしています。
unmanagedクラスで別スレッドにて不定期で呼ばれる関数から、
managedなフォームの内容を変更したいと考えています。

下記のようにコーディングしましたが、stackoverflow(InvokeRequiredがずっとtrueのため)
で動きません。。どなたか適切な方法を教えていただけないですか?
1.managedなformメソッドとしてform編集メソッド作成
2.スレッドセーフにするためInvokeでラップ
 参考:http://blogs.yahoo.co.jp/fireis_myblood/25643271.html
3.delegate->Marshal::GetFunctionPointerForDelegate()でポインタ化
4.unmanagedの不定期呼び出され関数に2の関数ポインタを設定
5.実行
576デフォルトの名無しさん
2012/08/14(火) 04:28:26.47
Marshal::GetFunctionPointerForDelegate の返り値を CreateThread の第四引数に渡して別スレッドから呼んでみたけど、
別スレッドからの呼び出しでは InvokeRequired は true になって、そこで Invoke した先では false になったよ。
577デフォルトの名無しさん
2012/08/14(火) 04:34:54.96
たぶんやりたいのはこうだと思うんだけど、違うかな。

DWORD WINAPI proc(LPVOID param) {
typedef void (*fp_t)(void);
fp_t fp = reinterpret_cast<fp_t>(param);

for(int i = 0; i < 10; ++i) {
::Sleep(1000);
fp();
}
return 0;
}

public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
IntPtr fp = Marshal::GetFunctionPointerForDelegate(gcnew MethodInvoker(this, &CppCli575::Form1::addText));
::CreateThread(NULL, 8192, proc, static_cast<LPVOID>(fp), 0, NULL);
}

void addText() {
if (textBox1->InvokeRequired) {
textBox1->Invoke(gcnew MethodInvoker(this, &CppCli575::Form1::addText));
return;
}
textBox1->Text += "A";
}
578デフォルトの名無しさん
2012/08/14(火) 08:45:11.72
>>577
MethodInvoker^はメンバ変数に置いとかないと
579デフォルトの名無しさん
2012/08/14(火) 10:12:04.44
日本人は マスコミ電波で動く ロボット人間

日本人は、先進諸国で飛び抜けてマスコミ報道を鵜呑みに
信じやすいことがこの動画で実証されています。

いわばマスコミ報道の「鵜呑度」を国際比較すると、
日本人は、先進国中ダントツに「鵜呑度」が高く70%、
最も低い国民は英国で14%です。
その他の主要欧米諸国(ロシアを含め)は20−35%です。
日本に近い国は、ナイジェリア、中国など、途上国と新興国となります。

別の言い方をすれば、日本人の70%は、
自分の頭で考えず(思考停止)、
テレビ、新聞、週刊誌などのマスコミの情報を鵜呑みにしていることを意味します。
青山は以前からこれを「観客民主主義」と言っています。
観客民主主義は、マスコ ミの情報操作による世論誘導に最も陥りやすく、
独裁にも呼応しやすい特性を持っています。

マスコミ報道「鵜呑度」
日本人70%、英国人14% You Tube



http://www.asyura2.com/12/senkyo132/msg/578.html
580デフォルトの名無しさん
2012/08/14(火) 12:21:37.43
>578
たしかにGCされるとだめですね。フォローどうも。
581575
2012/08/15(水) 03:56:45.46
>> 576-577
ありがとうございます。
実装してみたところ、確かに望みの動作をしました!!

なぜ自分のコードが動かないか突き止めるために
教えていただいたコードを変更していますが、別の問題にもつまづきました。。
申し訳ないですがもう少し教えてください。

<当面の問題:うまくコンパイルできない>
関数procを、クラス内のstaticメソッドに変更しようとした(下記)。
#コンパイル時に、未解決のトークン (0A000043) "public: static void (__cdecl* test2ch::Testproc::fp)(void)"とのエラーが発生。
class Testproc
{
typedef void (*fp_t)(void);
static fp_t fp;
public:
Testproc(LPVOID func)
{
fp = reinterpret_cast<fp_t>(func);
::CreateThread(NULL, 8192, (LPTHREAD_START_ROUTINE)Testproc::proc1, this, 0, NULL);
}

DWORD static WINAPI proc1(void)
{
for (int i = 0; i<10; ++i){
::Sleep(1000);
Testproc::fp();
}
return 0;
}
};
582575
2012/08/15(水) 04:00:38.88
連投すみません。
ちなみに、元の問題の原因究明のために今後確認したいことは

(staticメソッドでラッパした)インスタンスメソッドとしてproc1()を定義し、
proc1()内ではstaticではない関数ポインタfpを実行するように変更して
スレッドを実行して所望の動作(formが変更できる)かどうかを確認

です。
583デフォルトの名無しさん
2012/08/15(水) 21:02:13.28
>>581
C++/CLIじゃなくてただのC++の話だな。
static fp_t fp;
これの実体を定義していないだろ?
584575
2012/08/15(水) 21:19:41.78
>>583
お恥ずかしい限りです・・・
ご指摘ありがとうございました。
581の問題は解決しました。
585デフォルトの名無しさん
2012/10/18(木) 17:07:44.86
コンパイルが通りません
教えて下さい

ref class Test
{
bool& Bl;

Test(bool& bl)
{
Bl = bl;
}
};

586デフォルトの名無しさん
2012/10/18(木) 17:11:57.85
Test(bool& bl):Bl(bl){
}
587デフォルトの名無しさん
2012/10/18(木) 17:30:32.24
>>586
コンパイルが通りました
ありがとうございました
588デフォルトの名無しさん
2012/10/25(木) 19:29:47.52
画面周りだけCLI使ってそこから呼び出すのはPUREなC++にしている
589デフォルトの名無しさん
2012/10/25(木) 23:09:06.37
最初はそういう使い方してたけど
最近はp/invokeがあるからC#で別段問題ない
590デフォルトの名無しさん
2012/10/29(月) 12:21:58.58
最初から/CXの構想で作れなかったのかねえ
591デフォルトの名無しさん
2012/10/29(月) 15:20:01.15
>>588→画面をC#にしたら簡単すぎワロタ→内部もC#にしても速度変わんなかった→もうC#だけでいいや
592デフォルトの名無しさん
2012/10/29(月) 22:32:04.19
既存のC++のライブラリがある場合はC#から呼び出しまくると速度ゲロ重
593デフォルトの名無しさん
2012/10/30(火) 00:03:22.69
C++/CLIから呼んでもC#から呼んでも速度は変わらんよ
C++のライブラリはC#だとラップするのがゲロ面倒だから、その点ではC++/CLIが有利
でも本当に速度を求めるんなら、C++/CLIでもC#でも細かくネイティブコードを呼ばないで
必要なデータをまとめて受け渡しするようにして、
細かいところは全部ネイティブコードで書いてしまうのがいい
594デフォルトの名無しさん
2012/10/30(火) 00:11:42.83
>C++/CLIから呼んでもC#から呼んでも速度は変わらんよ
C++ InteropはP/Invokeより高速だよ
http://msdn.microsoft.com/ja-jp/library/ky8kkddw%28VS.80%29.aspx

他のところは同意。まとまった単位でネイティブに切り出さないと高速化の恩恵は薄い。下手するとC#より遅くなる。
595デフォルトの名無しさん
2012/10/30(火) 00:28:06.09
変なマーシャリングしないようにすればC#のDllImportでもそんなに遅くはならないよ
アプリに即した形でまとめてネイティブコードで処理、を突き詰めると
結局C++(not CLI)とC#でいいんだよなあ
596デフォルトの名無しさん
2012/10/31(水) 01:02:26.73
C++/CLIはビルドが遅いから糞
597デフォルトの名無しさん
2012/10/31(水) 04:22:13.18
必要に迫られて仕方なく使うもんですし
598デフォルトの名無しさん
2012/10/31(水) 20:11:20.60
マネージドからアンマネージドの処理を制御するのはいいんだけど
アンマネージドからマネージドに通知したい時どうしようか悩む
599デフォルトの名無しさん
2012/10/31(水) 21:21:47.37
gcrootで余裕
C#とDllImportだと参照管理がかなり面倒
600デフォルトの名無しさん
2012/11/01(木) 07:39:47.26
C++/CXもここでいいの?
βでもあったし環境依存みたいだが、VS2012 for Windows8で
ターゲットwin32の時に出るコンパイルエラー対策を自分用にメモっとく

インクルードディレクトリに追加 ;$(WindowsSDK_IncludePath);
ライブラリディレクトリに追加 ;$(WindowsSDK_LibraryPath_X86);
601デフォルトの名無しさん
2012/11/01(木) 09:24:06.16
>C++/CXもここでいいの?

全然別ものなので違います
602デフォルトの名無しさん
2012/11/01(木) 10:02:20.29
/CXも/CLIと同様に、GUI作るのに使おうとする勘違い君がたくさん出てくるんだろうな
このスレに溢れるC++/CLIに対するネガティブな意見はほとんど/CXにも当てはまる
603デフォルトの名無しさん
2012/11/01(木) 12:16:56.17
そう? ストア用アプリ開発をC++でやりたいって人に
思い留まらせるような要素は、C++/CXの環境には無いと思うけど
604デフォルトの名無しさん
2012/11/01(木) 13:09:28.96
説明するだけ無駄な気はするけど、

WinMDのおかげでDllImportの手間が消えて、呼び出しコストが減って、C++製のネイティブコードを対象にしたリフレクションすら使えるようになった。
これだけ扱いやすくなってくれると高速化のために部分的に利用するってのも十分いける。
C++ AMPとか面白げな物もあるしね。
(C++やC#製のライブラリがJavaScriptからも簡単に呼び出せるので、UIをHTML5とJSで作る人が増えそう)

C++を使いこなせるならC#覚えるのは簡単。
C++が使えてもWinRT部分は全部0から覚えなおし
GUI作るのに何倍も時間がかかるわりには、同じライブラリ使っているため体感速度に差がない。
それならC#覚えて、重い処理のとこだけC++でやればいい。(HTML5+JSでもいいけど)

この辺の事情からC++/CXもC++/CLIと同様にGUIを作るためのものではないと断言する。
これだけ言われてもC++/CXだけでやりたいって言うなら止めないけど、どこまで行っても茨の道だぞ
605デフォルトの名無しさん
2012/11/01(木) 16:58:40.48
GUIはともかくDirectX使う場合はC++/CXになりそうだがXNAないし
606デフォルトの名無しさん
2012/11/01(木) 17:50:29.07
>>604
うーん、説明されても無駄だったなあ
C++/CXのデメリットの部分が抽象的でピンとこないや

WinMDちゅーても既存のネイティブライブラリをC#アプリにマージしようとしたら
結局ラッパークラス書かなきゃならないわけで
C++/CLI時代なら、ラッパークラスの作業量が多くなり過ぎるくらいなら
インターフェイスの粒度を洗いなおしてもうDllImportにしちまえよってことになるけど
C++/CXはそのまま全部に使うっ選択肢もありだとおもうけどね

607デフォルトの名無しさん
2012/11/01(木) 18:03:13.80
>>605
DirectXはCX拡張使わずに普通のC++で使えるからC++/CX関係ない
設定画面などで少しだけOSネイティブのUIを使いたいときだけほんのちょっとCX使うくらいだろ
>>604
考え方が逆だと思う
これまでの.NETでは、C#からDllImportでC++を呼び出すのは簡単でもその逆は難しい
だからそこを補助するのにC++/CLIは有効
WinRTでは、C++からCXを使ってC#やWinJSで書かれたコンポーネントを呼び出す
ということが簡単に行えるから、既存のC++コードを他言語から
呼び出すためのラッパーなんて書かなくていいの
新規に作ったC#やJSのコンポーネントをC++から呼び出せばいい
608デフォルトの名無しさん
2012/11/01(木) 18:16:29.83
まぁ、どっちの使い方も出来るんだから好きなようにやりゃいいさ
609デフォルトの名無しさん
2012/11/01(木) 18:37:36.69
むしろC++/CXで呼び出せるデスクトップ用GUIライブラリが欲しかった…

C++/CLIはcli上にネイティブ用マーシャリングコードの生成だったけど
C++/CXはネイティブ上にCOM/WinRT用マーシャリングコードの生成なんんだよね確か

つまりObjCのパk(ry
610デフォルトの名無しさん
2012/11/01(木) 18:53:57.94
パコパコ
611デフォルトの名無しさん
2012/11/01(木) 21:43:12.40
問題はMSが途中で放り投げないのはどれかということだよ
612デフォルトの名無しさん
2012/11/01(木) 21:57:19.02
C++資産の活用という目的があるから/CLIも/CXも無くなることはないだろうけど
/CXも/CLIみたいにIDEサポートがなおざりになっていく可能性が高いな
/CLIも誕生当初は.NET開発の本命とか言われてたんだし
613デフォルトの名無しさん
2012/11/01(木) 22:01:57.86
全部放り投げて新たな言語開発したりしてw
614デフォルトの名無しさん
2012/11/01(木) 22:12:33.37
MSって実験的な技術でも最初から気合入れてしっかり使えるものを出してくるから厄介なんだよね
新技術出してすぐ放り投げるのはGoogleのほうがよっぽど酷いけど
あっちは一目見て「ああこれダメだわ」とわかるからな
615デフォルトの名無しさん
2012/11/18(日) 18:32:24.63
hackとproductの文化的な違いでしょ
MSのは、OSSのフリーライダーに仕方なく合わせてきた感がタップリ
過去の因縁からしてMSの製品は使わないといった派閥は今日でも現存する
616デフォルトの名無しさん
2012/11/23(金) 09:55:41.06
共産主義の理想はOSSのみが実現できる
617デフォルトの名無しさん
2012/11/23(金) 09:57:46.75
OSSと共産主義が関連あるのは本当?FSFじゃなくて?
618 ◆QZaw55cn4c
2012/11/23(金) 13:01:21.23
>>617
共産主義の定義による、スターリン以前か以後かどっち?
619デフォルトの名無しさん
2012/11/23(金) 18:05:53.27
C++で作られた.LIBなファイルをC++/CLIから呼び出すには何か注意点ありまか?

いま、ビルドはできるけどランタイムの初期化?で落ちてしまいます
620デフォルトの名無しさん
2012/11/23(金) 23:14:32.20
visual studio でc++ やってるけど

#include "stdafx.h"
#include "stdio.h"
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.Dll>
#include <string>

using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Collections;
using namespace System::Data::SqlClient;

int main(void)
{
String^ str;
String^ str200;

char* comp[100] ;
SqlConnection^ Conn = gcnew SqlConnection("Password=apple;User ID=sa;Initial Catalog=master200;Data Source=.\\sql2031");
Conn->Open();
int t;
str = "Select * FROM Customers";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,Conn);//
SqlDataReader^ dr= sqlCmd->ExecuteReader ();
while( dr->Read() )
{   str200=dr["CompanyName"]->ToString();
comp[t] = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str200).ToPointer();
こっから 表示ができない。
printf("<TD><input type='text' name='comp' size='30' value='"+comp[t]+"' ></TD>" );
621デフォルトの名無しさん
2012/11/23(金) 23:16:25.59
システム ストリング から苦労して
char* 変換できたけど
どうやってstringf できるか教えてほしい。
622デフォルトの名無しさん
2012/11/24(土) 09:22:28.68
あっさりできました。

printfやめたるだけだった。

Console::Write("<TD><input type='text' name='comp' size='30' style='background: #fafad2; font-weight: bold ;' value='"+dr["CompanyName"]+"' ></TD>" );


ストリング変換とかキャラ変換とか一切不要でした。
623デフォルトの名無しさん
2012/11/24(土) 10:22:23.19
>>622
死ね
624デフォルトの名無しさん
2012/11/24(土) 11:28:11.23
>>623

なんでそういうこというんですか?

私はあなたが、ガソリンをかぶって、
火をつけて焼身自殺することを望みます。

2ちゃんねる ニュース板+で

焼身自殺した人のニュースみたら、凄い悲しみます。

でも後悔はしないです。
625デフォルトの名無しさん
2012/11/24(土) 22:00:38.23
内閣府は24日、「外交に関する世論調査」結果を発表した。
中国に「親しみを感じない」と答えた人の割合は2011年の前回調査比9・2ポイント増の80・6%で、
1975年の調査開始以降で最高となった。
韓国に「親しみを感じない」という人も23・7ポイント増の59%と急増し、過去2番目に高い数字となった。
外務省は「尖閣諸島(沖縄県)や竹島(島根県)をめぐる対立が、中国や韓国に対する国民感情の悪化につながった」と分析している。

 調査は9月27日〜10月7日にかけ、全国の成人男女3000人を対象に行い、1838人(61・3%)が回答した。

 日中関係が「良好だと思わない」との回答は16・5ポイント増の92・8%、
日韓関係が「良好だと思わない」も42・8ポイント増の78・8%に達し、ともに過去最高となった。

 中国との関係では、今年9月の尖閣諸島国有化をきっかけに中国各地で反日デモが相次ぎ、
現地の日系企業が焼き打ちや略奪に遭ったことなどが影響したとみられる。
「韓流ブーム」などを通じ近年は良好だった韓国との関係についても、
今年8月の韓国の李明博(イミョンバク)大統領による竹島上陸が「冷や水」を浴びせた格好だ。

http://www.yomiuri.co.jp/national/news/20121124-OYT1T00811.htm?from=ylist
626デフォルトの名無しさん
2012/11/25(日) 15:24:56.72
C++/CLIのクラスライブラリのプロジェクトが2つ(AとB)あります。
BはAを使うので、Bのプロジェクトの設定でAを参照するようにしています。
Aのビルドは問題なくできますが、Bをビルドすると
 LNK2020: 未解決のトークン (06000022) <Aにあるクラスの静的メソッド名>
と言われます。
何か他に設定が必要でしょうか。教えてください。
627デフォルトの名無しさん
2012/11/25(日) 15:46:03.82
http://msdn.microsoft.com/ja-jp/library/b57tw91b(v=vs.80).aspx

このエラーを解決するには、次のどちらかの操作を実行します。

欠けている関数またはデータを定義します。

欠けている関数またはデータが既に定義されているオブジェクト ファイルあるいはライブラリを取り込みます。
628デフォルトの名無しさん
2012/11/26(月) 22:01:25.29
C++でのオブザーバーパターンの実装例を教えていただけますでしょうか
色々検索したのですが見つかりませんでした
629デフォルトの名無しさん
2012/11/26(月) 22:05:15.44
C++/CLIならそんなもん要らん。言語に組み込まれている。
イベントを使え。
630デフォルトの名無しさん
2012/11/26(月) 22:10:44.54
オブザーバーパターンの実装が分からんとか
さすがにC++/CLIを使う資格がないと言わざるを得ない
C#かC++からやれ
631デフォルトの名無しさん
2012/11/26(月) 22:35:48.50
obsecureですね
わかります
632デフォルトの名無しさん
2012/11/28(水) 21:17:29.45
C++/CLIみたいな方言をやる意味あるのか?
633デフォルトの名無しさん
2012/11/28(水) 22:48:53.31
しがらみってもんがあってな
634デフォルトの名無しさん
2012/11/28(水) 23:56:16.87
2012で..netのウィンドウがある普通のアプリが
作れなくなったのだったか?
635デフォルトの名無しさん
2012/11/28(水) 23:58:00.13
プロジェクトテンプレートが無くなっただけで、WinFormsの項目テンプレートはある
MSとしてはフェードアウトさせたいんだろうな
636デフォルトの名無しさん
2013/01/27(日) 04:17:32.21
C++/CLI勉強中なんですけど、なんでpropertyで2回以上も型を書かせるのはなんで?
property System::Collections::Generic::IEnumerable<System::String^>^ Kuso
{
  System::Collections::Generic::IEnumerable<System::String^>^ get();
  void set(System::Collections::Generic::IEnumerable<System::String^>^ value);
}
と書くのは気が狂うんですけど。それぞれの型が異なることってあるの?↓でいいじゃん。
property System::Collections::Generic::IEnumerable<System::String^>^ Kuso
{
  auto get();
  void set(auto value);
}

てかこのスレ2ヶ月間も書き込みがないってどういうことなの。あっ…(察し
637デフォルトの名無しさん
2013/01/27(日) 09:57:28.12
便利に普通に使う言語じゃねえからなこれ
たかが.NETとネイティブコードを橋渡しする非標準拡張のために
必要以上に言語に手を入れたくなかったんだろ
638デフォルトの名無しさん
2013/01/27(日) 15:02:59.86
printf("%x", data);
すると
出力が
ffffff93

ffffff94
などになるdataという名前の変数に対して演算をして
結果をdata2に格納し、

printf("%x", data2);
の出力が必ず
ffffff90
になるようにしたい
(16進数表示した時の下一桁以外は変えず、下一桁だけを必ず0にしたい)のですが、
dataに対してどのような演算を行えばよいでしょうか。
639デフォルトの名無しさん
2013/01/27(日) 15:40:23.86
>>638
ビット演算でANDする。
640デフォルトの名無しさん
2013/01/27(日) 17:35:27.93
>636
typedefという便利な機能があってのう…(しかし名前空間が汚染される)
641デフォルトの名無しさん
2013/01/27(日) 17:58:33.08
マクロの出番だよ、マクロの出番
642デフォルトの名無しさん
2013/01/28(月) 15:00:14.29
C++、C#どっちもできて、C++でGUIを簡単に作りたいっていうのには向いてるよね
SDKがC++でもC#どちらでも使えるし、守備範囲が広い
ただその為に変数の型変換とかちょっとめんどくさいこと調べないといけないけど
643デフォルトの名無しさん
2013/01/31(木) 00:50:44.45
酷い釣りだ…C++に見えてその実全く違う言語じゃねぇか。
644デフォルトの名無しさん
2013/01/31(木) 07:09:42.74
顧客が本当に望んでいたもの: デスクトップ向けC++/CX
645デフォルトの名無しさん
2013/01/31(木) 08:33:51.13
>>643
いや両方とも使える
逆に言うと2つの言語を覚えてる気分になるかもしれん
646デフォルトの名無しさん
2013/02/20(水) 15:07:47.77
//homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.html
このHPを見て勉強しているんですが
「グローバルに下記を設定しておく。」の範囲ってどこからどこまででしょうか?
647デフォルトの名無しさん
2013/02/20(水) 15:11:06.36
htm じゃないか
648デフォルトの名無しさん
2013/02/20(水) 15:15:14.41
>>647
あ、すいませんhtmでした
//homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.htmです
649デフォルトの名無しさん
2013/02/20(水) 15:26:26.90
staticなんだし適当にやってみりゃよかろう
WIDTHとHEIGHTはどこでもいいしarray部分はclass Form1に入れたら
とりあえず動いたぞ、面白いなこれw
650デフォルトの名無しさん
2013/02/20(水) 15:33:46.31
何の役に立つのかな
651デフォルトの名無しさん
2013/02/20(水) 15:34:48.07
>>649
自分やると動かないんですけど・・・
何で動かないんだ?
652デフォルトの名無しさん
2013/02/20(水) 15:38:18.30
エスパー希望ですねわかります
653デフォルトの名無しさん
2013/02/20(水) 15:54:18.59
うまくいかないのは実行時なのかコンパイル時なのか
うまくいかないと判断したのはどこ?
654デフォルトの名無しさん
2013/02/20(水) 17:02:18.31
初心者なので…すいません
実行するとエラー100いくつとかはくんですよね
範囲設定間違ってるのか、何が原因なのかわかんないです。。。
655デフォルトの名無しさん
2013/02/20(水) 17:07:17.35
100いくつって数かよ
もしそうならコンパイル時だろうし
全角スペース入ったままなんだろ
置換で半角に変えとけ
656デフォルトの名無しさん
2013/02/20(水) 17:26:40.56
全角→半角やってもダメみたいです…
もし成功した方いたらそのプロジェクトファイルうpしていただけませんか?
どなたかお願いしますううう
657デフォルトの名無しさん
2013/02/20(水) 17:30:18.61
ダメみたいとか、自分の状況を隠し続ける人に言えることは何もない
658デフォルトの名無しさん
2013/04/17(水) 21:57:33.57
等高線グラフを表示させたいのですが、
手段が見つかりません。

3D点(x,y,z)の点(データ)×数万個を線で結びつけて、色付けしたものです。

チャートコントロール(mschar)では等高線をサポートしておらず、実現できません。
System::Windows::Forms::DataVisualization::Charting::Chart

どなたかご教授くださいませ!

[環境]
visual c++ 2008 express
vs2012へ更新検討中
659デフォルトの名無しさん
2013/04/17(水) 22:02:56.86
そういうのは可視化ツール使えよ
ParaViewとか
660デフォルトの名無しさん
2013/04/17(水) 22:10:53.92
Gnuplotでも使えば一瞬
自分でそういうの書くのは手段が目的化してるバカ
661デフォルトの名無しさん
2013/04/17(水) 23:21:24.73
マルチ
662デフォルトの名無しさん
2013/06/01(土) 08:15:06.30
ちょっと教えてください
自分は独学でC/C++,C#と、まぁC系の勉強をして、ソフトも作れるようにもなりました。
で、就職活動してたんですが、年齢のせいで、資格か業務経験が無いとって感じで、どの企業にもスルーされてきました。
で、今、職業訓練学校でJAVA及びAndroidアプリの作製っていうコースにかよってて
さすがに、まぁ、昔、独習JAVAって本でさらっとJAVAを勉強してた部分もあったりでJAVA自体は
勉強するというより(現在は、まだAndroid開発の講義じゃなくてJAVAの講義)今の、講師からも言われたんですが
「〜(自分)さんは、もうJAVAの部分は解かってるだろうから、色々と予習していったら良いですよ。」と言われてる状態です。
さて、ここからが本題ですが、JAVAのソースを見てるとnativeっていう修飾子があって文字通りnativeで作られた
メソッドがあったんです。で、JAVAのVMもどうやらCで書かれてるようなのがソース見てわかりました。
そしてCLIですが、C++で組んだアンマナージドなクラスライブラリ等をC#で使う時ってなんかしらの修飾子
ってあるんですか?一度実験でアンマネージドなC++のクラス作ってマネージド(CLI)なクラスの中にほりこんだら
[そりゃ無理じゃ、ポインタとして宣言しろ!このカスが!]って嘘だけど、まぁ、こんな感じのエラーがでたんです。
C#側でwin32apiを使いったかったらdllのアトリビュート文を書けば良いんですけど
クラスはどうしたら良いんでしょうか。
どなたかこうすれば良いという方法があればご教示ください。
663デフォルトの名無しさん
2013/06/01(土) 09:35:33.80
文章にイラン部分が多すぎ。人生相談の板は別にあるぞ
質問は的確に
664662
2013/06/01(土) 10:22:22.81
>>663
そやね、確かに質問がまとまってなかったは。
要は、普通にC++でクラスを作ります(例えばTestっていうクラス)。
それをC#内で使おうと思っても、無理になります。
で、その仲介役としてCLIを使うとします。
その時にCLIで作ったマネージドなクラス内でTestクラスのインスタンスを生成するには
どうしたら良いですか。という質問です。
665デフォルトの名無しさん
2013/06/01(土) 11:56:57.18
>>664
C++のクラスをCOMコンポーネントにする
これで直接C#内で使えるだろ
666デフォルトの名無しさん
2013/06/01(土) 12:11:21.91
gcnew じゃなくて new してポインタを受けるだけじゃうまくいかなかったのか?

ちなみにマネージドとアンマネージドの世界の行ったり来たりはオーバーヘッドすごいから
小さなメソッドをちまちま呼び出すような処理はやめておけ。
667662
2013/06/01(土) 12:13:59.07
>>665
あ、そっか、たしかにCOMコンポーネントは呼べるね。
でも、C#で以前(何年前かは忘れた)Excel呼び出して
C#側で、Excel終了さしたのにプロセス見たら
残ってて、こりゃあかんと思ってExcel呼び出すのは
やめたんだけど、今のVSは、そこらへんもちゃんとしょりしてるのかな
俺がもってるVSって2005なんでね
668デフォルトの名無しさん
2013/06/01(土) 12:22:18.97
>>667
ぼろいPCならアプリ終了しても暫くプロセス残ってるなんて普通にあると思うが
669デフォルトの名無しさん
2013/06/01(土) 14:37:10.11
COMの場合それとは違って寿命管理の話だな
670デフォルトの名無しさん
2013/06/01(土) 14:39:16.16
>>664
C++/CLIのマネージドクラス内でインスタンスを生成して
「フィールドに保持したい」ということでいいのか

フィールドをポインタにしてnewして持てばいい
671デフォルトの名無しさん
2013/06/02(日) 00:02:02.93
こんなかんじかな、Disposableにしてるから
deleteのタイミングが重要なときはDisposeすればよい

ref class M2 {
N1 *n;
public:
M2() { n = new N1; }
~M2() { delete n; }
!M2() { delete n; }
};
672デフォルトの名無しさん
2013/06/02(日) 10:25:59.95
CLI用スマポを作る
673デフォルトの名無しさん
2013/06/02(日) 12:55:57.74
>>667
多少スレ違いだけど、それの解決方法はほぼ確立してるんだ。
結局のところ外部プロセスサーバーが終了する前に
Execl.Appicationを何度も生成からそうなるわけで、
はじめからExecl.Appicationをひとつだけ生成しておくか、
WeakReferenceにExecl.Appicationの参照をもって、
参照が消えてれば生成するというロジックにすれば万事解決する。
連続して使うときはExcelのインスタンスが毎回立ち上がらずに
パフォーマンスがいい。
674デフォルトの名無しさん
2013/06/02(日) 13:08:52.90
そうだね
675デフォルトの名無しさん
2013/06/02(日) 14:57:18.85
>>667
似たような経験があるけど、そのときは、単に参照を破棄してもGCされるまでは
オブジェクトが解放されないからCOMサーバーに伝わらんだけだった。
そういうことじゃなくて?
676デフォルトの名無しさん
2013/06/02(日) 15:17:26.36
俺も経験ある
GCされるまで開放されないんだよねあれ
677デフォルトの名無しさん
2013/06/02(日) 19:34:42.29
馬鹿には無理
678デフォルトの名無しさん
2013/06/02(日) 21:35:27.92
ReleaseComObjectは現実的な対処法ではないだろう。
ある程度の規模のコードで、例外時も含めて漏れなく書くとなると
コード量が膨らみすぎる。
679デフォルトの名無しさん
2013/06/17(月) 19:39:26.55
.Net Framework 2.0のUdpClientクラスって、recvfromに該当するものってないのかな?
相手のIPアドレスが知りたいんだけども。

同じポートに複数のスレッドがブロードキャストしてて、片側のパケットだけを対象にしたい
のよね。
680デフォルトの名無しさん
2013/06/17(月) 22:44:18.60
Connectすればいいよ
681679
2013/06/18(火) 12:48:05.81
自己解決した。

ひとまず、EndRecieveの引数にIPEndPoint仕掛けてやればいいっぽ。
そしたらStringで判定できる。
682デフォルトの名無しさん
2013/06/18(火) 13:06:09.51
>>679
recvfrom の仕様は分からないけど、送信元のアドレスは UdpClient.Receive
の引数で取れるよ。
非同期なら UdpClient.EndReceive の第2引数。
見当違いだったらごめん。
683682
2013/06/18(火) 13:07:11.20
リロード忘れたorz
684679
2013/06/18(火) 15:35:49.41
>>682
うん、後者でやることにしたんだわ
685デフォルトの名無しさん
2013/06/18(火) 15:44:15.55
リロード忘れたの意味がわからない人か
686デフォルトの名無しさん
2013/06/18(火) 16:31:15.38
わかってるから優しくフォローしたように見えるけど。
世の中難しいね!
687デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN
配列初期化時に値も設定したのですが、gcnew array<int>(3){1,2,3};
って書かないとコンパイラさんにはじかれます。
gcnew array<int>(){1,2,3};
みたいな、配列サイズを指定しない初期化方法は無いでしょうか。
688デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN
()書かない
689デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN
本当だ!!<>のあとに{}を書くっていう発想がなかったです。
ありがとうございました。
690デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN
C++/CLIで使えるロギングライブラリってどういうのがあるんでしょう?
.netで用意されているのか、あるいはlog4cppなんかのC++用の
ライブラリを使ったりしているんでしょうか。
691デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN
log4netとか
692デフォルトの名無しさん
2013/07/15(月) NY:AN:NY.AN
なるほど、見落としていました。
log4netは名前を見たことはあったんですが、「C#で使うもの」と
刷り込まれて、すっかり頭から抜けていました。
693デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN
listBox1->Items->Add("A");
これがOKで
std::string a = "A";
listBox1->Items->Add(a.c_str());
これだと'const char *' から 'System::Object ^' に変換できないって出るんだけどどういうこと?
最近CLIさわりはじめたんだけどわからん・・・
694デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN
リテラルの文字列は文脈によってString^として扱えるってだけ
char*やwchar_t*とString^は別物
char*からならgcnew Stringしたりとか
695デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN
>>694
とんくす
696デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
>>679
これ自分も試してるんだがうまくいかん。
EndReceivedの第二引数の中みても"255.255.255.255"で見分けがつかない。

後でコード載せますん。
697デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
コードっす(1/2)。"192.168.3.128"からのUDPブロードキャストのみを対象にしたいっす。
--------
#pragma endregion
private:
System::Void btnUdpRecv_Click(System::Object^ sender, System::EventArgs^ e)
{
String^ FilterIPAddress = L"255.255.255.255";
// Receive a message and write it to the console.
int portID = 3000;
IPEndPoint^ ipep = gcnew IPEndPoint(IPAddress::Any, portID);
UdpClient^ udpcli = gcnew UdpClient(ipep);

UdpState^ udpst = gcnew UdpState();
udpst->e = ipep;
udpst->u = udpcli;

udpst->u->Connect(FilterIPAddress, portID);
this->btnUdpRecv->Enabled = false;

Console::WriteLine("listening to RT");
udpcli->BeginReceive(gcnew AsyncCallback(this, &UDP_RECVTEST::Form1::ReceiveCallback), udpst);

// Do some work while we wait for a Packet. For this example,
// we'll just sleep
while (!messageReceived)
{
System::Threading::Thread::Sleep(100);
}

this->btnUdpRecv->Enabled = true;
}
698デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
続きっす(2/2)。
--------
//Call back function for the read packet data
System::Void UDP_RECVTEST::Form1::ReceiveCallback(IAsyncResult^ ar)
{
String^ FilterIPAddress = "192.168.3.128";

UdpState^ state = (UdpState^)ar->AsyncState;
UdpClient^ udpcli = state->u;
IPEndPoint^ ipep = state->e;

EndPoint^ remoteep = udpcli->Client->RemoteEndPoint;

int len = udpcli->Client->EndReceive(ar);
String^ recvip = ipep->Address->Broadcast->ToString();

if(ipep->Address->Broadcast->ToString() == FilterIPAddress)
{
array<unsigned char>^ receiveBytes = udpcli->EndReceive(ar, ipep); //Packet received

Console::WriteLine("Received packet length {0}", receiveBytes->Length);
messageReceived = true;

return;
}

Console::WriteLine("listening to RT");
udpcli->BeginReceive(gcnew AsyncCallback(this, &UDP_RECVTEST::Form1::ReceiveCallback), state);
}
699デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
以下、簡単に説明。

プロジェクトはWindowsフォームアプリケーションです。フォームにボタンを配置して
クリックしたら"btnUdpRecv_Click"がうごくという簡単なもの。

あと、UDPブロードキャスト送信側は、inet_addr("255.255.255.255")で送信しております
です。

なにかヒントでもありましたらご教示くださいませ。
700デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
EndReceiveの第二引数かいてないのはいろいろ試してそれでもだめだったんで
一回もと(というか、チャレンジする前)に戻したためです。ご了承くだ。
701デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
なんでEndReceive二回よんでんの?
702デフォルトの名無しさん
2013/07/22(月) NY:AN:NY.AN
そう!すいませんアホなことしてましたアンド紛らわしい変数名つけてたんで違うほうみてた…
お騒がせしますた!
703デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN
スレッドを立てたいんだけど、
HANDLE ThreadHandle = (HANDLE)_beginthreadex(NULL, 0, ReadThread, NULL, 0, NULL);
unsigned __stdcall ReadThread(void *p){}
こうすると関数呼び出しには引数リストが無いからメンバーへのポインタを作成するために
&Namespace::ReadThreadって感じで指定しろって言われたからそうしたら今度は
delegate インスタンスを作成する場合以外に&Namespace::ReadThreadのアドレスを指定できないとか言われて八方塞なんだけどどうしたらええの・・・
704デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN
いっそ、CreateThread
705 ◆QZaw55cn4c
2013/07/24(水) NY:AN:NY.AN
_biginthread ってなんで必要なんだ?
CreateThread で十分用がたりるのだが?
というか cygwin/gcc-3 なんでこれしか選択肢がない
706デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN
_beginthreadも結局は内部でCreateThreadを呼び出しているのではあるが
そのほかにランタイムが使う内部変数の初期化なども行っている

よっていきなりCreateThreadを呼び出すと
出所不明のメモリリークに悩まされたりすることになる

逆に言えばMSVCRTを使わないのであればCreateThreadをつかえば良い
707デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN
テンプレ類は覚えること少なくする目的で簡単にしようという理念からはじまり、
いろいろ隠ぺいすることで逆にめんどくさいものになってるよね
708デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN
>>703
warning C4441無視してね?
709デフォルトの名無しさん
2013/07/26(金) NY:AN:NY.AN
Managed Threadは使わんの?.NETなんだし
710デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN
array<String^>^ txts = gcnew array<String^>{"りんご", "ごりら", "らっぱ"};
int index = 0;
String^ msg = txts[index ++] + txts[index ++] + txts[index ++];

とやった時にmsg = "りんごりんごりんご"になるのですが
msg = "りんごごりららっぱ"となるようなインクリメントの方法はないでしょうか
711デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN
3行にわければ?

sehermitage.web.fc2.com/program/c_lang.html
> インクリメント演算子++とデクリメント演算子--は,変数の値を変化させるが,
> その変数が同じ式の中で再び参照された場合,動作は未定義となり値は保証されない
712デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN
>>711
情報どうもです!式を分けるしかないですね。
713デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN
32bitのネイティブのDLLを呼び出す.netのDLLがあります。
それを呼び出す.netのアプリの設定で、共通言語ランタイムサポートを/clr:safeでコンパイルすると、64bitOSで動かなくります。
共通言語ランタイムサポートを/clrにすると動きます。/clr:safeのままで動かすにはどうしたら良いでしょう。
714デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN
>>713
safeだとanycpu指定で作ったアセンブリとなるので、
64bitのWindowsだと64bitモードで動作する
手元にあるVS2010では適当なコンパイルオプションが見つからないので、
CorFlagsで32bitフラグをONにするとかかな
715713
2013/08/16(金) NY:AN:NY.AN
>>714
corflagsでいけました。ありがとうございます。
716デフォルトの名無しさん
2013/09/08(日) 19:50:17.03
MFCアプリを移行しようと/clrでビルドしたところ、LNK4248が大量に発生しました。
原因は使用しているdllで使う構造体の定義本体がなく事前宣言しかないための
ようですが、これは無視しても問題ないものでしょうか?
当然、この構造体のメンバにアクセスすることはなく、これまでは問題ありませんでした。
また、この警告の出力を抑制する方法はないでしょうか?環境はVS2008です。
717デフォルトの名無しさん
2013/09/09(月) 01:05:58.58
数が少ないなら
struct nantoka { };
みたいなのを定義するとか。

あるいは大量にあって全部無視して安全だと分かっているなら link.exe にオプション /ignore:4248 をつけるとか。
(こっちは試したことないので動くかどうかはしらん)
718デフォルトの名無しさん
2013/09/10(火) 01:04:26.29
前者の方法でうまくいきました。ありがとうございました。
719デフォルトの名無しさん
2013/09/11(水) 18:19:50.17
PropertyGridで説明つけるとき

C#は、
[Description("説明領域に書き込めます。")]

VBは、
<Description("説明領域に書き込めます。")> _
とあるのですが

CLIではどのように記述すればよろしいのでしょうか?
720デフォルトの名無しさん
2013/09/11(水) 18:22:25.98
そんなのはMSDN見ろよ
C++/CLIは今はまだサンプル表示できる言語に残ってるぜ
721デフォルトの名無しさん
2013/09/11(水) 18:34:21.21
サンプル見てもCLIのPropertyGridのDescription見つからなかったのです。

で、解決しました。
Formと同じusing namespace書いたら
C#と同じ書式でいけました。
722デフォルトの名無しさん
2013/09/11(水) 18:35:33.94
ComponentModelにおった
723デフォルトの名無しさん
2013/09/23(月) 12:57:32.04
ドッキングウインドウとかできますか?
724デフォルトの名無しさん
2013/09/27(金) 21:09:38.57
MDIとか、できない?
725デフォルトの名無しさん
2013/09/29(日) 00:32:42.55
bulletを使いたいのですが
整列データ型はサポートされてないって言われ
通りません。
BT_MANAGED_CODE定義以外何か必要なのでしょうか?
教えてください
726デフォルトの名無しさん
2013/09/29(日) 16:15:50.71
Imageクラスって各イメージファイル形式のフォーマット知らんでも勝手に保管してくれるんだっけ?
たとえば jpeg の 0xFFD9とか
727デフォルトの名無しさん
2013/09/29(日) 16:21:06.24
ちょっと言ってる意味が分からない
728デフォルトの名無しさん
2013/09/29(日) 17:39:33.10
あー、ごめん。
例えばBITMAP形式のファイルを読み込んでSaveメソッドでjpeg指定するだけで変換できるのかと。
729デフォルトの名無しさん
2013/09/29(日) 17:41:13.27
というか、まぁ出来たは出来たんだけどね。
ただ、.Netのバージョンによって挙動が変わるっぽいね。
0xFFFEの部分が無視されちゃったりされなかったり。
730デフォルトの名無しさん
2013/10/02(水) 18:23:28.32
visual studio 2012は、新しい項目の追加で継承されたフォームが
出てこないんですか?
継承されたフォームを作成するにはどうすればいいのか教えてください。
731デフォルトの名無しさん
2013/10/12(土) 15:02:58.87
for(int i=0;i<Hoge->Split(array<String^>{L"\r\n"},StringSplitOptions::None)->Length;i++){
...
}

array<String^ >^Hoge_Split = Hoge->Split(array<String^>{L"\r\n"},StringSplitOptions::None);
for(int i=0;i<Hoge_Split->Length;i++){
...
}

int i=0;
for each(String^ Hoge_Line in Hoge->Split(array<String^>{L"\r\n"},StringSplitOptions::None)){
...
i++;
}
のどれが処理が速いの?
「...」の部分が十分に長く要素の番号を参照することがあるとして
732デフォルトの名無しさん
2013/10/12(土) 16:26:14.92
試せよ
733デフォルトの名無しさん
2013/10/12(土) 16:53:11.84
フォームアプリケーションでの質問だけど、
テキストボックス(名前:textBox1とする)を配置すると、
textBox1->Text
でString型の文字列がとれるんだけど、これをatoiしたいがためにchar型に変換しようとして、
atoi(textBox1->Text->c_str());
って書くと、「c_strはSystem::Stringのメンバではありません」って表示される。
c_strってメンバじゃないの?
734デフォルトの名無しさん
2013/10/12(土) 17:06:19.97
じゃないよ
System::Stringとstd::stringは別物
735デフォルトの名無しさん
2013/10/12(土) 17:12:51.52
VBじゃねえんだから大文字小文字の区別はつけよう
736デフォルトの名無しさん
2013/10/12(土) 17:26:01.80
うおおまじか
紛らわしいな…ありがとう
737デフォルトの名無しさん
2013/10/12(土) 23:00:26.48
C++/CLIでWPFをやろうとしていますが、XamlReader::Load()で自作クラスのインスタンス化に失敗します。
フレームワークに含まれるSystem.Windows.Applicationなら<Application>でのインスタンス化に成功するが、
その派生クラスMyApp.Appをインスタンス化しようとして<Application x:Class="MyApp.App" >としても、
クラス名を間違えたときと同じように下のような例外が出てしまいます。。

指定されたクラス名 'MyApp.App' は、実際のルート インスタンス型 'System.Windows.Application' と一致しません。

クラスを見つけられていないんだと思いますが、これはどこかで設定する必要があるんでしょうか?
プロジェクトの設定は「空のCLRプロジェクト」のサブシステムをWINDOWSにして、WPFに必要な
PresentationCore.dllなどの参照を追加した程度です。
738デフォルトの名無しさん
2013/10/12(土) 23:10:16.98
Applicationを継承しろ
っていうか素直にC#を併用しろ時間の無駄だ
739デフォルトの名無しさん
2013/10/12(土) 23:18:26.35
C#でデザイナ使ったときはXamlってコンパイル時に処理されるからなあ
clr-namespaceとか指定してみたら
740デフォルトの名無しさん
2013/10/13(日) 00:20:33.93
<my:App x:Class="MyApp.App" xmlns:my="clr-namespace:MyApp">としてみると

不明な型 '{clr-namespace:MyApp}App' を作成できません。

というエラーになりますね。やっぱり何か認識できていないのかな。
741デフォルトの名無しさん
2013/10/13(日) 00:25:09.93
ApplicationのXAMLいらなくね?
普通にコードからgcnew AppしてRunしてMainWIndowすればいいじゃん
アプリケーションリソース使うならリソースディクショナリをLoadXamlすればいいし
デザイナがないのにわざわざデザイナ向けの面倒な方法をとる意味がわからん
742デフォルトの名無しさん
2013/10/13(日) 00:51:09.66
App.xamlに限れば省略する手もあるでしょうが、現象としてはMainWindow.xamlも同じなので。
クラスをインスタンス化するという意味においてはApp.xamlもMainWindow.xamlも違いは
ありませんので、例としてApp.xamlを挙げたに過ぎません。
743デフォルトの名無しさん
2013/10/13(日) 08:31:38.34
>>733
やりたいなら、Convert::ToInt32(textBo1x->Text)
だな
744デフォルトの名無しさん
2013/10/13(日) 08:32:40.33
ちとタイプミスったが許せ
745デフォルトの名無しさん
2013/11/10(日) 04:03:56.73
C#のfixedとC++/CLIのpin_ptrって同じものですか?

C#で配列をfixedして処理するより,C++/CLIにマネージ配列で渡した後,C++/CLI内でpin_ptrして処理する方が速いのでしょうか?

初歩的な質問で申し訳ないです.
746デフォルトの名無しさん
2013/11/10(日) 07:13:51.28
ネイティブコードに渡さないときはinterior_ptrで書くんじゃない。
パフォーマンスは大差ないかと…。
747デフォルトの名無しさん
2013/11/10(日) 07:53:22.46
そもそも普通にマネージコードで処理するんならC#で普通にインデックス使って回せば最適化されるから十分速い
ヘタにポインタ使った方が遅くなることもある
748デフォルトの名無しさん
2013/11/10(日) 12:45:13.44
パフォーマンス的には対して変わらない,下手な書き方をすればかえって遅くなるということでしょうか?

やりたかったのは,C#からBitmapとint配列を渡して,C++/CLI内でヒストグラムを作るとかそんなところです.
C#側からは,
MakeBrightnessHistogram(Bitmap^ bmp, array<int>^ histogram)
を呼び出して,この関数の内部でFormat32bppRgbのBitmapDataを取得し,histogramをpin_ptrで固定した後,
MakeBrightnessHistogram_Unmanaged(int* data, int size, int* p_histogram)
を呼び出すというような形になっています.(dataはBitmapData->Scan0をint*にキャストしたもの,sizeはbmpの画素数)
ちなみに,MakeBrightnessHistogram_Unmanaged内で,RGBの値をBrightnessに変換する変換テーブル(ネイティブ配列)にアクセスしています.

画像データやヒストグラム,変換テーブルといった配列にアクセスする命令が多いので,C++/CLIを使えば速くなるのかと思ってプログラムしてみたのですが,
こういった処理は,わざわざC++/CLIを使わなくても,C#で高速にできるものなのでしょうか?
最初から素直にこれを質問すれば良かったですね...
749デフォルトの名無しさん
2013/11/10(日) 13:40:47.67
そういうコード書くならCかC++でDLL作って
それを呼び出すようにした方が手っ取り早い気がするのよ
750デフォルトの名無しさん
2013/11/10(日) 13:53:11.58
C#で書いて問題になるほど遅かったら移植すればいいでしょ
実際そんなに変わらないけどな
パフォーマンスの心配は9割無駄だからくだらないこと気にしてないでまずは動かせ
先入観でパフォーマンスを考えるほど無意味なことはない
751デフォルトの名無しさん
2013/11/10(日) 14:12:32.92
とりあえずC#で書いてみて,処理速度がDLLを呼び出す方法と対して変わらないようであれば,
DLL使わずにC#だけで書くようにしたいと思います.

ありがとうございました.
752デフォルトの名無しさん
2013/11/10(日) 19:45:52.63
>>748
lockbits()を使うだけでも相当速くなるぞ
BitMapキャンバスへの描画メソッドは物凄く遅い

http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleBitmapPlus.html
http://tinqwill.blog59.fc2.com/blog-entry-46.html

ここら辺とか
753デフォルトの名無しさん
2013/11/10(日) 23:31:16.11
BitmapDataと言ってるからLockBitsは使ってるんでしょ
754デフォルトの名無しさん
2013/11/11(月) 09:48:07.24
>748
アルゴリズムをunmanagedで書くなら、たしかにSSE2 intrinsicとか使えば圧倒的なスピードが出る。
でも、それならP/Invokeでいいのでは感がある。
755デフォルトの名無しさん
2013/11/11(月) 22:42:22.66
環境に合わせて最適なコード吐くんだろ?違うのか?
756デフォルトの名無しさん
2013/11/18(月) 13:42:22.83
byte[,] bmp = new byte[640,480];

とかやってたりしてw
757デフォルトの名無しさん
2013/11/19(火) 13:06:00.35
>>756
それ自体別に何もおかしくないぞ
必要ならポインタでアクセスすることもできる
758デフォルトの名無しさん
2013/11/21(木) 11:24:38.95
>>757
C#が遅いとか言ってる奴いるけど、C#で多次元配列をこう書くと遅くなるんよ
ジャグ配列を使うか一次元配列で処理すれば、C++とほぼ同じ速度で処理出来るが
759デフォルトの名無しさん
2013/11/21(木) 22:16:01.02
だからポインタでアクセスできると言ってるでしょ
ポインタ使えば多次元配列でも1次元配列をforループで回して最適化が効いた時と同程度には速くなるよ
760デフォルトの名無しさん
2013/11/21(木) 23:39:11.69
あれ?遅いのはジャグ配列じゃなかったか?
最近別言語の案件やってるんで忘れてしまったわ
761デフォルトの名無しさん
2013/11/21(木) 23:47:38.45
bmp[y][x]をx方向に処理する場合は1次元配列の連続アクセスと同じなので速い
y方向だと無茶苦茶効率悪いから多次元配列のほうが有利
762デフォルトの名無しさん
2013/11/22(金) 09:39:48.63
bmp[x + y * bmp.width]
で、ええやん
763デフォルトの名無しさん
2013/12/03(火) 03:37:15.12
スマホで眺めるのによいライブラリリファレンスサイト教えてください
764デフォルトの名無しさん
2013/12/14(土) 00:11:16.35
速度が問題になるとこをCLIで書くなよ。
765デフォルトの名無しさん
2013/12/16(月) 23:15:56.37
ある外部staticライブラリをつかうプロジェクトをVS2008で作ったんですが
それをデバッグリンクすると実行時にランタイムでヒープが壊れてるとか
アサートだします。
出すところは外部ライブラリで
static std::map<>;
してグローバルにmapを作ってるところです。

clrなしのプロジェクトを作ってやってみると問題ないんですがなにが悪いんでしょう?
ランタイムライブラリはどちらも/MDdで外部ライブラリと同じです。
766デフォルトの名無しさん
2013/12/16(月) 23:55:38.87
STLCLIを使えというヘジたんの思し召し
767765
2013/12/17(火) 01:47:56.48
http://stackoverflow.com/questions/4928763/mixed-mode-c-cli-crashing-heap-corruption-in-atexit-static-destructor-regist
/ENTRY:mainが悪いみたいだよ
消してWinMainからmainよんだら直った
768デフォルトの名無しさん
2013/12/17(火) 17:35:03.34
OnPaintBackgroundさせないようにするため
Panel継承したMyPanelを作り、
今までgcnew Panelされてた部分をMyPanelに置き換えたら、
デザイン編集する画面がエラーになりました。

継承したコントロールをデザインで使う方法か
Panelコントロールの再描画を継承しないですむ方法ありますか?
769デフォルトの名無しさん
2014/01/29(水) 15:03:47.19
C++/CLIってUNICODE使うのがデフォ?
770デフォルトの名無しさん
2014/01/29(水) 15:11:01.76
System::String^はそうだな
ネイティブ側は好きなのにしる
771デフォルトの名無しさん
2014/02/16(日) 08:13:15.62
VC6以来のWinアプリの仕事何だけど
最近は.net使えばグラフ表示とか簡単にできるようになったの?
それともGDI使うやり方健在?
772デフォルトの名無しさん
2014/02/16(日) 09:39:35.75
市販のかexcel使ったほうが早いという状況は変わらん
773デフォルトの名無しさん
2014/02/16(日) 23:57:23.21
EXCELに描かせるのが一番金がかからない
774デフォルトの名無しさん
2014/02/17(月) 13:02:54.72
エクセル最強すぎる。
C++でエクセル出力したい。
CSV無しで
775デフォルトの名無しさん
2014/02/17(月) 13:47:00.62
POIかNPOIで
776771
2014/02/17(月) 18:45:06.84
オシロの画面みたいなのを1秒あたり10フレームくらい表示させたいのですが,,,
777デフォルトの名無しさん
2014/02/18(火) 10:09:25.99
今どうやってんの?
DirectX使ってる?
778デフォルトの名無しさん
2014/02/18(火) 13:15:15.29
WPFなら秒間60フレーム余裕だよ
779デフォルトの名無しさん
2014/02/19(水) 15:44:04.10
C#でも余裕だな
3日もあればそれなりの物作れるし
780デフォルトの名無しさん
2014/02/20(木) 17:38:23.07
今のPCなら10fpsは全くもって問題無い
俺は初めて自力描画したが、25ms間隔でUSB送信+描画が全く問題無かった
781デフォルトの名無しさん
2014/02/22(土) 18:10:01.30
C++プロジェクトとC#プロジェクトからなるソリューションを
作る場合は、DllImport を使うのが正統的なやり方ですか?
782デフォルトの名無しさん
2014/02/22(土) 18:18:26.53
C++/CLIを使うのも別に不当ではないぞ
好きにしろ
783デフォルトの名無しさん
2014/02/22(土) 18:19:01.60
エスパー呼んでる?
784デフォルトの名無しさん
2014/02/22(土) 18:21:31.68
でもさ、C++/CLIって今はWindowsフォームアプリ作れなくなったというか、非推奨でしょ?
ヒッジョーに残念なんだけど、俺はクソなC++Builder使ってる
785781
2014/02/22(土) 19:14:11.22
>>782,783,784
最近C++始めました。今まで作ったC#の自作ライブラリをC++化しようとしています。
CLRクラスプロジェクトでクラスライブラリを作ってC#アプリから使う場合は、普通に
参照設定して使えましたが、でもそれだと、クラスライブラリの中身がReflectorなどで
見えてしまうので、それで/clr無しでビルドしてDllImportの方法でC#から使えたのですが、
これが正しいやり方かどうか知りたかったのです。要するに、逆コンパイルできない
(あるいは難しい)クラスライブラリを作りたいのですが。
786デフォルトの名無しさん
2014/02/22(土) 19:25:29.69
難読化しろ
787781
2014/02/22(土) 20:01:19.06
>>786
それも考えたのですが、C#のDLLを難読化するくらいなら、C++でDLL
作るほうが手間がかからないかなと思ったのですが。
皆さん、こういう用途には、VS2013付属の難読化ソフトで十分ですか?
788デフォルトの名無しさん
2014/02/22(土) 21:16:20.23
秘密にしたいところはC++で書くよ
789デフォルトの名無しさん
2014/02/24(月) 10:59:05.87
ILMergeはC++/CLIでも使えますか?試したら出来ませんでした。
790デフォルトの名無しさん
2014/02/24(月) 12:00:23.44
mixed moeだとだめかもしれんね。/clr:safeや/clr:pureは試した?
791デフォルトの名無しさん
2014/02/24(月) 12:18:42.22
> clr:safeや/clr:pure
これ使うならC++/CLI使う理由が消えないか?
難読化がC++/CLI使う目的ならなんか違う気がする
業務か趣味かでも違うし
792デフォルトの名無しさん
2014/02/24(月) 13:20:04.45
難読化の質問の続きなのか?
793デフォルトの名無しさん
2014/02/26(水) 11:45:55.31
VS2013に難読化のソフト付属するようになったのか
794デフォルトの名無しさん
2014/02/26(水) 14:39:40.34
わざわざネイティブコードがちょろっとついてたら、まっさきにそこ覗くけどね
まあしっかり考えて。
795デフォルトの名無しさん
2014/02/26(水) 15:10:45.06
確かに、覗いてみたくなるな
Dependency Walkerに放り込むだけでもそれなりに見えてくるしな
796デフォルトの名無しさん
2014/02/26(水) 22:42:23.74
確かにすげー怪しいもんなw
むしろ、木を隠すなら森の中じゃないかな。
797デフォルトの名無しさん
2014/02/27(木) 00:13:46.26
ILが解析しやすいのはディスコンパイルできることよりも、
型名やメソッド名などのメタ情報がそのまま残ってることだから、
その辺改善したほうがましだな。
簡単な難読化ツールのやってることもその程度だし
798デフォルトの名無しさん
2014/03/08(土) 21:13:21.28
>>784
俺は顧客の強い要望でVS2013 expressのVC++でWindows formアプリを作ってる。
非推奨だけど、作ろうと思えば一応作れるのね。
799デフォルトの名無しさん
2014/03/10(月) 10:17:51.76
C++でのデザイナ機能も一応残してるんだよね
っていうか、Expressでも出来るんだ
800デフォルトの名無しさん
2014/03/10(月) 20:21:18.79
>>799
できますよ
801デフォルトの名無しさん
2014/03/11(火) 10:47:47.08
ATL/MFCもexpressでやらせてくれたらいいのに
あったらあったでそれなりに便利
802デフォルトの名無しさん
2014/03/11(火) 10:59:46.32
ATL/MFC無しでもCStringくらい標準にしてくれるといいのにね
System::Stringからの変換がスマートにできるのに
803デフォルトの名無しさん
2014/03/11(火) 11:35:40.31
ATL/MFCまで入れちゃったら有償版と変わらないのでは?
804デフォルトの名無しさん
2014/03/11(火) 15:16:32.72
まあそれ以外にも違いはいろいろあるし
805デフォルトの名無しさん
2014/03/11(火) 23:00:52.68
ウィザードやリソースエディタなんかがないとまともに開発には使えないだろうけど、
MFCのコードをビルドだけできるようヘッダとライブラリを公開して欲しいとは思う。
806デフォルトの名無しさん
2014/03/15(土) 21:18:07.18ID:KpGSNq9a
C++/CLIとC#を相互運用するとき、IDisposableの扱いについて参考になるWebページがあれば教えてください。
807デフォルトの名無しさん
2014/03/20(木) 14:59:59.03ID:svYczKSB
初歩的な質問ですみません。

^ がついた関数と ^ がついていない関数の間でやりとりをしたいのですが、
やりかたが分かりません

例えば時間を再設定するときに、
DateTime^ dth = gcnew DateTime(2014, 3, 20, 0, 0) と
DateTime dt = DateTime(2014, 3, 20, 0, 10) を作ったとして、

dth = dth->AddSeconds(10) とかではなく、

dth = dt.(なにかの変換演算子) で時間を再設定してみたいのですが、
なにか方法はありませんか?
808デフォルトの名無しさん
2014/03/20(木) 15:11:41.08ID:IvzGN7OH
dth = dt;
dth = %dt; // 丁寧に書いた場合
809デフォルトの名無しさん
2014/03/20(木) 17:32:35.09ID:yZVXWZKu
C++/CLIでは値型とクラスの場合で書き方が変わったりするから要注意だな
810デフォルトの名無しさん
2014/03/20(木) 17:57:34.38ID:iFIpmoD3
C++/CLIで作っているフォームの表示が気づいたらXP仕様になってしまいました
過去につくった物はWin8仕様の表示になっているのですがどこの設定で変更できるのでしょうか
環境はWindows8.1でVS2012です
811デフォルトの名無しさん
2014/03/20(木) 20:04:05.05ID:svYczKSB
>> 808-809
ありがとうございます。さっそく参考にしていろいろ調べてみますv
812デフォルトの名無しさん
2014/03/20(木) 20:28:07.59ID:svYczKSB
807です。質問の時に代入する方向が逆でしたが、もらったヒントで
無事解決できました m(_ _)m

dth = %dt; // DateTime^ = DateTime
dt = static_cast<DateTime>(dth); // DateTime = DateTime^
813デフォルトの名無しさん
2014/03/20(木) 21:58:05.31ID:geioZCY7
2段目のはこれでいけるな。
dt = *dth

 -> が *. なのもCの文法と同じ。
dth->AddSencond(...)
(*dth).AddSencond(...)
814デフォルトの名無しさん
2014/03/20(木) 22:26:22.96ID:svYczKSB
>>813
一文字で決まるおまじない教えてくれてありがとうですv
815デフォルトの名無しさん
2014/03/23(日) 21:20:34.11ID:HlHPSHO4
質問失礼します
クラスaの配列をメンバ変数に持つクラスbを作りたいのですが、クラスaの配列の初期化がうまく行きません。(コンパイル自体はできます)
これは初期化の方法が間違っているのでしょうか?
それともそのような設計(クラス配列を持つクラス)自体がよろしく無いものなんでしょうか?

ref class a
{
  int x;
public: a(int num){x = num;}
};

ref class b
{
  array<a^>^ array_a;
public:
  b(){
    array_a = gcnew array<a^>(10);
    for (int i = 0; i < array_a->Length; i++)
    {
      array_a[i] = gcnew a(i);
    }
  }
};
816デフォルトの名無しさん
2014/03/23(日) 21:31:58.22ID:lzq9JOXE
問題なさそうだけど どう「うまく行きません」なの?
817デフォルトの名無しさん
2014/03/23(日) 22:35:57.72ID:HlHPSHO4
実体がない(?)と言いますか、array_aに何かしようとすると、その関数のそれ以降の処理をすっ飛ばすようになります。

例えばクラスaにint GetX(){return x;}、
クラスbにint GetArrayA(int num){return array[num]->GetX();}みたいな関数を追加して、
ウィンドウズFormの方でLabelを一つ用意します。

private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
  b^ test;
  test->GetArrayA(0);
  Label1->Text = "だいじょうぶ";
}

これだと、Label1->Textは「だいじょうぶ」に変わらずLabel1のままです。
しかし
>test->GetArrayA(0);
の部分をコメントアウトにするとLabel1->Textは「だいじょうぶ」になります。
818デフォルトの名無しさん
2014/03/23(日) 23:19:57.49ID:ZHSALumd
これってコンパイル通る?>>817の方。
819デフォルトの名無しさん
2014/03/23(日) 23:36:35.34ID:HlHPSHO4
>>818
817もコンパイルは通ります
あと、今試してみたんですが出来上がったexeファイルを起動してみると
「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。(中略)
オブジェクト参照がオブジェクトインスタンスに設定されていません」
と出ますね……
こちらもまたtest->GetArrayA(0);の部分をコメントアウトすると問題なく起動します
820デフォルトの名無しさん
2014/03/24(月) 01:02:03.43ID:XCyA/SAw
test =gcnew 以下略つけてみたら?
821デフォルトの名無しさん
2014/03/24(月) 01:50:12.79ID:Ae/Hf3r6
>>820
あっ……「だいじょうぶ」になりました。
ありがとうございました!
822デフォルトの名無しさん
2014/03/24(月) 11:45:41.86ID:R2MpMn2O
デバッガ使えない環境なのかな、、、
例外起きた時は出力ウィンドウに出るぜ
823デフォルトの名無しさん
2014/04/26(土) 12:11:13.54ID:J0aLOZMr
c#のdynamic型に相当するものを
c++/cliで何と書けば良いですか?
824デフォルトの名無しさん
2014/04/27(日) 21:57:27.97ID:t/xZR1S/
多分無い
825デフォルトの名無しさん
2014/05/09(金) 18:40:24.14ID:avbF2wuD
c++/cli勉強したいと思っています。
>>array<a^>^ array_a;
の<a^>^ってどいういう意味ですか?
顔文字に見えます。ググりたいのですが^>^でググっても
ヒットしません。キーワードを教えてけろ。
826デフォルトの名無しさん
2014/05/09(金) 18:46:04.26ID:Mn4+ksrv
トラッキングハンドル
827デフォルトの名無しさん
2014/05/09(金) 19:05:13.77ID:avbF2wuD
>>826
ありがとうございます。さっそくググってみます。
828デフォルトの名無しさん
2014/05/11(日) 22:02:14.61ID:OFkZfhFe
参照型を内部に保持するコンテナの参照を宣言かな。
829デフォルトの名無しさん
2014/05/13(火) 09:25:37.06ID:QKhoqLLT
ジェネリックメソッドの継承がうまく行きません。

generic<typename T> ref struct B;

ref struct A abstract {
generic<typename U> virtual A ^f(B<U> ^u) = 0;
};

//C4570 明示的に抽象として宣言せずに抽象関数を含んでいます
generic<typename T> ref struct B : A {
//C4490 オーバーライド指定子が不適切
generic<typename U> virtual A ^f(B<U> ^u) override {
return u;
}
};

同じ戻り値と引数でも、同じ関数だと認識されないようなのですが、どのようにすれば良いですか?
830デフォルトの名無しさん
2014/05/13(火) 10:02:57.61ID:Kixx6i0Q
http://social.msdn.microsoft.com/forums/vstudio/ja-JP/2f138907-64a3-4326-bfea-d0e4b3c15fa8
仕様っぽいのであきらめてC++/CLI投げ捨ててC#で書く
831デフォルトの名無しさん
2014/05/13(火) 10:44:57.11ID:QKhoqLLT
なるほど・・・ありがとうございました。
832デフォルトの名無しさん
2014/05/13(火) 23:30:42.34ID:OiuzuWyN
C#でdelegateに設定されたメソッドを調べるのにGetInvocationListを参照していたのですが、
C++/CLIで同じようなことをするとコンパイルエラーが発生してしまいます。
どのようにコーディングすればよいでしょうか?

// C#
http://ideone.com/O4j7TX

// C++/CLI
http://ideone.com/Lazyxs
※実際は23行目のauto mcd = (MulticastDelegate^)hoge->Piyo;で
error C3918: 使用するには、'Delegate::Hoge::Piyo' がデータ メンバーでなければなりません
といったエラーが発生してしまいます。
833デフォルトの名無しさん
2014/05/13(火) 23:41:08.55ID:RH21G1qI
C++/CLIの方はeventじゃん
834デフォルトの名無しさん
2014/05/13(火) 23:47:44.50ID:OiuzuWyN
>>833
あーeventキーワード取っ払ったら通りました。ありがとうございます。
そこでコンパイルエラーにしてくれたらいいのに…。
835デフォルトの名無しさん
2014/05/14(水) 08:39:30.20ID:ICklhj5Y
event自体は正当で使う側が問題なのに、eventの方でコンパイルエラー言われても
836デフォルトの名無しさん
2014/05/14(水) 11:14:20.64ID:k1JIQlQE
ワロタ
837デフォルトの名無しさん
2014/05/14(水) 23:09:07.27ID:OfRhuTl1
すいません>>832です。
禿しく勘違いしてました。C#のeventはシンタックスシュガーなんですね。
event EventHandler^ Piyo
{
void add(EventHandler^ value) { mPiyo += value; }
void remove(EventHandler^ value) { mPiyo -= value; }
void raise(Object^ sender, EventArgs^ e) { mPiyo(sender, e); }
}
EventHandler^ mPiyo;
などとしたら上手くいきました。
838デフォルトの名無しさん
2014/05/26(月) 03:20:04.74ID:l0k3Jdk0
c++/cli初めて作成しています。

c++プロジェクトでライブラリを作成して
void func1(const char *p){
cout << p << endl;
}
を定義して、
c++/cliプロジェクトでこの関数を呼び出すと、

func1("Hello World"); //呼び出し成功
func1("Hello" + "World"); //型 "System::String ^" の引数は型 "const char *" のパラメーターと互換性がありません

となったので、エラー解決のために少しググって、よくわからないまま
char* pStr = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi("Hello" + "World").ToPointer();
のようにして、
func1(pStr); //呼び出し成功
しました。

この場合、
func1("Hello" + "World");
を実行可能に出来るようにc++ライブラリ側で、この引数を受けられるfunc1関数を定義することは可能でしょうか?
839デフォルトの名無しさん
2014/05/26(月) 05:33:40.37ID:TbdBw+Sj
無理
840デフォルトの名無しさん
2014/05/26(月) 09:14:28.60ID:l0k3Jdk0
>>839
そうですか無理ですか。
出来れば、出来ない理由を教えてください。
841デフォルトの名無しさん
2014/05/26(月) 09:35:16.69ID:QBzBPwJ7
System::String^はネイティブでは直接扱えないから
842デフォルトの名無しさん
2014/05/26(月) 09:42:14.96ID:l0k3Jdk0
>>841
なるほど。ありがとうございました。
843デフォルトの名無しさん
2014/06/16(月) 00:28:31.77ID:KzXlrctf
c#で書かれたdllを呼び出すc++/cliのラッパー
static libを作り、それを呼び出すc++のコードを
書けば、c++でc#のdllを呼び出す事が出来ますか?
844デフォルトの名無しさん
2014/06/16(月) 03:18:12.95ID:TImdW3D8
出来るよ。リンク時に/MDオプションを使う必要はあったと思うけど。
845デフォルトの名無しさん
2014/06/16(月) 11:06:40.38ID:KzXlrctf
>>844
コメントありがとうございます。
c#からc++を呼び出す例はググるとたくさんあるの
ですが、c++からc#を呼び出す良い例、どこかに
ないでしょうか?
846デフォルトの名無しさん
2014/06/20(金) 23:37:50.80ID:oekTSRl4
std::regexで"["や"]"などの文字を扱うにはどう書けばいいですか?
たとえばテキスト中に"[43]"などの[]で囲まれた数字があるかどうか知りたいのですが。
847765
2014/06/21(土) 16:55:19.23ID:BNLCZco1
久しぶりにVS開いたらWinFormが消えとる。もう捨てられるのか

>>845
これか
http://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0

>>846
\でエスケープします
regex r("\[43\]");
848デフォルトの名無しさん
2014/06/21(土) 16:56:33.36ID:BNLCZco1
regex r("\\[43\\]");
こうか
849デフォルトの名無しさん
2014/06/25(水) 18:40:03.79ID:a/L3Ky6p
こんどCLI+API+STLで久々に開発するぜ
まともにWindowsアプリ作るの15年ぶりだぜ
850デフォルトの名無しさん
2014/06/25(水) 18:40:43.32ID:jtRedncf
ご愁傷様
851デフォルトの名無しさん
2014/06/25(水) 19:43:48.20ID:a/L3Ky6p
なんでご愁傷様?
852デフォルトの名無しさん
2014/06/29(日) 15:12:56.12ID:74KQZ/Pg
WebBrowser::ActiveXInstanceのようなCOMポインターをObject^で返したいんですが
どう書いたらいいんでしょうか

Object^ get()
{
IUnknown* pU; //これを返したい
...
}

C#だと全部属性でやってて生ポインタをどう処理するかの参考にならないです。
853デフォルトの名無しさん
2014/06/30(月) 07:13:06.08ID:AE59suyp
それを返した先でどうするのさ
例えばIntPtrを返しても一応Object^にはなるけど多分そういう事じゃないよね?
854デフォルトの名無しさん
2014/06/30(月) 08:29:40.70ID:k6aB52Mb
Object^o=Marshal::GetTypedObjectForIUnknown(IntPtr(pU),Object::typeid);
とりあえずこうしました
addref,releaseが同じにならないといやだけど
855デフォルトの名無しさん
2014/07/30(水) 21:04:47.45ID:4VkY0HvI
C++/CLI超楽しい
.Net、WinAPI、STL、Boost混在できて使いたい放題だし
何でみんな毛嫌いするの?
856デフォルトの名無しさん
2014/07/30(水) 22:46:45.65ID:310IZqCv
C++とは似て異なるから
857デフォルトの名無しさん
2014/07/30(水) 23:48:31.72ID:QJA3s1XV
最初から別言語だと思っとけばいいじゃん。
俺もC++/CLIは面白いと思うが、先がなさそうなのが残念だな。
WPFが使えるようになったらMFCのアプリを移行したいと思っていたんだが。
858デフォルトの名無しさん
2014/07/31(木) 13:36:46.98ID:N7h43RT+
やりたい放題というのは1人でやってるだけなら楽しいが
足を引っ張る仲間がいると地獄巡り満腹コースになる
859デフォルトの名無しさん
2014/07/31(木) 20:54:03.92ID:Ng6XWAlf
マネージ関数の中でlambda使えないとか、最近は混ざる利点みたいなものが少なく…。
860デフォルトの名無しさん
2014/08/05(火) 16:06:10.29ID:8/O3Z/TB
genericとtemplate混ぜたら楽しいと思ってたけど、
あんまり混ざらないようにできてる・・
861デフォルトの名無しさん
2014/08/05(火) 21:42:31.92ID:a3vuC94X
variadic template使って型パラメータの数が違うgeneric classを使えるかと思ったら、なんかエラーになるしね。
862デフォルトの名無しさん
2014/08/06(水) 12:55:33.48ID:YJYkBYpf
genericクラスの中にtemplateは作れないし
その逆もできない。
できるのは、genericクラスをtemplateで
継承するくらい。

>>861 variadic genericあったらいいなぁ
863デフォルトの名無しさん
2014/09/26(金) 00:00:55.65ID:Q/qK3xNe
C++/CLIに直接関わる質問ではないのですが
適切なスレが見当たらなかったのでここで質問させてください。

ネイティブのnative.dllをマネージのmanage.dllが参照しているとき
native.dllにパスが通っていない状態でmanage.dllを使用すると
FileNotFoundExceptionが発生してしまいますが、
その例外の値からはnative.dllが見つからないことが原因であることを
判断することができません。

そこでmanage.dllが参照しているdllの一覧のようなものを取得したいのですが
そのようなAPIは用意されていますでしょうか?
とりあえずdumpbin.exe /dependentsで出力される結果を用いる実装にしてみたのですが
やはり外部の実行ファイルに頼るのは微妙ですし、何より処理が重いです。
Win32APIでも構いませんので何か方法がありましたらご教示ください。
864デフォルトの名無しさん
2014/09/26(金) 08:53:54.22ID:CyXmGE6J
開発フェーズなら
Dependency Walkerというツールがある
865デフォルトの名無しさん
2014/09/26(金) 08:56:02.56ID:CyXmGE6J
あっ、実行時の話やったか
866デフォルトの名無しさん
2014/09/26(金) 11:29:52.72ID:b/KTTsk9
FileNotFoundが発生したら
LoadLibrary("native.dll");
GetLastError()してみるってのはどうだろう?
867デフォルトの名無しさん
2014/10/08(水) 22:50:24.63ID:T8t7hCtu
>>863です。亀ですいませんが解決しました。
APIとしてはImageHelpライブラリ辺りが使えそうだったのですが途中で詰まったので断念。
結局ファイルを直接読んでIMAGE_DOS_HEADER構造体からたどって
インポートデータを解析することで対応できました。
868デフォルトの名無しさん
2014/10/16(木) 17:29:15.53ID:sLOsTk32
質問です。

MyCapsuleというクラスを作り、GetValue(参照渡しの引数)という仮想関数を
定義しておいて、このクラスから派生したクラスにおいてGetValueの実装を
するにあたり、与えられた引数がある特定の型に合致する場合にはその
引数に値を代入する、という動作を実現したいです。
例えばMyCapsuleIntという派生クラスでは、与えられた引数がint型だった
場合に、その引数に(何かしらメンバ変数などの)値を代入する、というもの
です。

こういう場合アンマネージドだと引数としてvoid*を使った実装になるかと
思うんですが、マネージドだとかわりにObject^%とかを使うのでしょうか?
ハンドルと追跡参照について未だによくわかっていないので、どうするのが
一般的な作法なのか見当がつきません。

よろしくお願いします。
869デフォルトの名無しさん
2014/10/16(木) 21:50:11.68ID:rtOJWyFH
アンマネージからマネージの関数を呼んで
マネージドの中で作ったString^からchar*でアンマネージドに戻したいんです。

調べたところ
(char*)Marshal::StringToHGlobalAnsi("").ToPointer()ってのがあるのはわかったのです。
けど、これで戻してもアンマネージドからMarshal::FreeHGlobalが呼べないのでだめです。
一度StringToHGlobalAnsiで得たchar*を別のcharのバッファにコピーしてから戻す方法になるのでしょうか。
870デフォルトの名無しさん
2014/10/16(木) 22:01:55.82ID:rvFRd6iT
Marshal::StringToHGlobal...で確保したのはLocalFreeすればいいけど
普通は呼び出し元がバッファ用意するなり、std::stringとかで返すなりするもんじゃね?
871デフォルトの名無しさん
2014/10/16(木) 22:15:47.60ID:rtOJWyFH
なるほどLocalFreeで解放できるんですね。

>普通は呼び出し元がバッファ用意するなり
固定長になるからどうしようかなとおもって。

>std::string
StringToHGlobalAnsiで領域を確保したのに
stringでまた確保されるのがあれかなとか。
気にしすぎといわれればそうです・・・。
872デフォルトの名無しさん
2014/10/22(水) 13:38:11.49ID:5iN2ViqP
C#みたいにCodeProviderで動的な文字列をコンパイルして
実行したいんですが、もしかしたらC++/CLIにはCodeProviderが
ないですか?
873デフォルトの名無しさん
2014/10/22(水) 13:43:12.37ID:5iN2ViqP
すいません、抜けてました。
CodeDomProviderを継承したCodeProviderです
874デフォルトの名無しさん
2014/10/22(水) 17:09:24.88ID:LQAHBIBx
まあ混合型使えないからそれならC#でいいじゃんってことになるよね
875デフォルトの名無しさん
2014/11/11(火) 14:49:35.49ID:TsA8Knwq
C++のDLLをC#で使いたいのですがC++/CLIで吸収したほうがいいのかな?
C++の構造体のポインタとかあってわけわからん
876デフォルトの名無しさん
2014/11/11(火) 16:50:02.76ID:9mz6Ds+P
構造体 マーシャリング でぐぐる
877デフォルトの名無しさん
2014/11/12(水) 00:51:06.13ID:pdAxKpZn
>>875の件ですがC#でなんとかがんばることにしました
お騒がせしました
878デフォルトの名無しさん
2014/12/09(火) 00:10:16.60ID:xpR1dfQS
C++/cli からC++のプロジェクトに定義している関数を呼び出したいんです。
C++プロジェクトのlibファイルを参照し、includeファイルをC++/cli側に
持ってきて#include すると、物凄い数のエラーがでます。

(C2011:C2079:C2504:C3395:C3699)

[1] C++/cliで参照できるよう、ビルドエラーを直すしかない

[2] 別の方法でC++の関数をビルドエラー無しに参照できる。

ちなみに、C++の関数を参照しないで自作・・・という回答は無しでお願いします。
879デフォルトの名無しさん
2014/12/09(火) 10:30:47.48ID:sSNN3cut
物凄い数のエラーじゃなくてエラーの内容をチェックしろよ。
出力ログのエラーの行をダブルクリックすると問題の箇所に飛ぶから
何で再定義だとか定義がないと言われてるか考えろ。
何でその程度のレベルでC++/CLIとかやってんの。
880デフォルトの名無しさん
2014/12/09(火) 10:30:56.11ID:Xzj5HeMN
1.C++から呼び出す
2.C#に移植する

C++/CLIでなきゃいけない理由なんてあるん?
881878
2014/12/09(火) 22:59:58.60ID:ygQnozb4
すみません、初心者なりにエラーの原因を調べてきました。

a.h

class A : public B {}

b.h

class B {}



この時に Class B で再定義のエラーが発生していました。

a.h が先にincludeされているのが問題で、b.h を先にinclude するよう
ソース修正すれば良い・・・・・ということでしょうか??
882デフォルトの名無しさん
2014/12/11(木) 12:05:51.55ID:WAwY/dPu
各ヘッダの先頭に#pragma onceと書く

a.hでb.hのクラスを使っているなら
a.h内でb.hをinludeしろ

cpp側でincludeの順を気にしなきゃならないのは糞
883デフォルトの名無しさん
2014/12/15(月) 20:00:30.77ID:JoQajMNA
質問です。

任意の型のマネージド配列(cli::array)を、任意の個数、引数として受け取って
それらの配列としての長さの最小値を返す関数を書きたいと思っています。

イメージとしては、
array<String^> arrStr = gcnew array<String^>(6);
array<double> arrDob = gcnew array<double>(8);
array<int> arrInt = gcnew array<int>(3);
に対して、
Function(arrStr, arrDob) = 6
Function(arrStr, arrDob, arrInt) = 3
となるような関数Functionを書きたいと思っています。

しかし、この場合の引数リストの書き方がよくわかりません。
単純に可変長の引数リストだとFunction(... array<Object^>^ args)みたいな
書き方になると思うんですが、これをマネージド配列の配列だからといって
真似てFunction(... array<array<Object^>^>^ arrays)みたいな書き方をしても、
呼び出し側(例えばFunction(arrStr, arrDob)とか)で引数リストが一致しない旨
怒られます。このような場合の適切な引数リストの書き方ってありますか?

あるいは回避策として、引数はFunction(... array<Object^>^ args)としておき
この関数の中でfor each (Object^ arg in args) { argが配列かどうか }という
コードもありえますが、肝心の、「argが配列かどうか」チェックするコードが
わかりません。

上記いずれか一方で構いませんので、解決策をご教授いただけないでしょうか?
884デフォルトの名無しさん
2014/12/15(月) 20:51:05.44ID:oSpn/+/y
... System::Array^ args
arg->GetLength

... System::Collections::IList^ args
arg->Count
885デフォルトの名無しさん
2014/12/15(月) 22:28:59.04ID:JoQajMNA
>>884
試してみましたが、いずれの場合もコンパイルエラーC3132が発生します。

そもそもargの型を何に指定すべきなのか、というのがよくわかっていません。
例えば
int Function(... array<Object^>^ args)
{
  int MinLength = -1;
  for each(array<Object^>^ arg in args)
  {
    if ( (MinLength < 0) || (arg->Length < MinLength) )
    {
      MinLength = arg->Length;
    }
  }
  return MinLength;
}
みたいなコードだと、Function(arrStr, arrInt)を実行したとき、それら引数を
System.Object[]にキャストできない旨を怒られます。
886デフォルトの名無しさん
2014/12/15(月) 22:43:22.71ID:oSpn/+/y
ごめんちょっとぼけてた
... array<System::Array^>^ args
for each (auto arg in args) { int len = arg->GetLength(0);
... array<System::Collections::IList^>^ args
for each (auto arg in args) { int len = arg->Count;
887デフォルトの名無しさん
2014/12/15(月) 22:49:54.98ID:JoQajMNA
>>886
うまくいきました!
動作版のコードは以下の通りです。

int Function(... array<System::Array^>^ args)
{
  int MinLength = -1;
  for each(auto arg in args)
  {
    if ( (MinLength < 0) || (arg->Length < MinLength) )
    {
      MinLength = arg->Length;
    }
  }
  return MinLength;
}

ありがとうございました。
888デフォルトの名無しさん
2015/01/28(水) 22:20:24.42ID:NY0MHdg2
String^ selectedEmployee = (String^)(ComboBox1->SelectedItem);

^ってどういう意味?
889デフォルトの名無しさん
2015/01/28(水) 22:43:41.32ID:CFOgWxxn
トラッキングハンドルって意味
890デフォルトの名無しさん
2015/01/30(金) 16:37:12.12ID:w20faKmH
こらこら。
普通のC++でいうところの*だよ。
891デフォルトの名無しさん
2015/02/06(金) 15:15:17.14ID:n2QXEqei
>>888
参照型
892デフォルトの名無しさん
2015/03/01(日) 13:44:47.71ID:M4V41Yry
既存の native C++ のプログラムからC#で作ったdllを呼び出す必要が出てきたんで
/clrを使おうと思うんだが、.NETを使う部分以外のソースを全部 #pragma unmanaged
しておけば既存のnativeのプログラムと変わらないと考えていいのかな?
スタートアップに時間がかかったりするかもしれないけど。
それ以外になにか、純粋なnativeアプリと比べてのデメリットとかあるだろうか?
893デフォルトの名無しさん
2015/03/03(火) 10:49:44.41ID:2xjYWNh7
拡張する度にpragma追加するのが面倒くさいからCOM exportのがいいよ
894デフォルトの名無しさん
2015/03/03(火) 22:20:54.28ID:QODsipDB
COMはregistryやGACに登録しないとならないのが。それがなければ使いたいんだけど。
pragamはまぁ、stdafx.hに仕込んどけばいいだけなんで。
で、試してみて一応ビルドは通って、DependencyWalkerで見てもほとんど同じに見えたけど、
起動時に例外が出てうまく立ち上がらなかった。
どちらにしても、ビルドに時間がかかるんで普通にwrapperだけC++/CLIで作った方が楽そう。
895デフォルトの名無しさん
2015/03/03(火) 23:37:18.31ID:TZKBUrl9
Register freeのcomが良い
896デフォルトの名無しさん
2015/03/04(水) 00:00:58.99ID:1PNNe6DT
ほー、Interopでも登録なしで使えたのか。知らんかった。
897デフォルトの名無しさん
2015/04/11(土) 23:36:34.69ID:rfVEU9W7
http://peace.2ch.net/test/read.cgi/tech/1420379468/279
から誘導されてきました。

質問です。

実行時にフォームをイベントごとコピーしたいのですが、
元のイベント関数のハンドラが取れず、上手く行きません。
解決策があれば教えてください。

やりたいこと:
チェックボックス等のフォームをデザイナで指定し、イベント関数もデザイナで指定します。
プログラムでこのチェックボックス等を10個ほどにコピーし、並べます。
このときにプロパティ等はコピーできますが、イベント関数がコピーできません。

理由:
位置決めが楽なので、デザイナ側で頭のFormは指定したいのです。
そして管理上分かりやすいので、イベントもそこに書いて、これをコピーしようとしています。
ところがEventInfo::GetRaiseMethodではnullが返ってきてしまいます。
ハンドラさえ取れれば以下と組み合わせて上手く行くと思うのですが。
https://msdn.microsoft.com/ja-jp/library/ms228976%28v=vs.110%29.aspx

状況:
なおC#だと以下で上手く行きます。
http://stackoverflow.com/questions/6055038/how-to-clone-control-event-handlers-at-run-time
ただしC++だと、GetField("events")がnullptrを返してくるので駄目です。
キーワードは色々試してみましたが、当たりませんでした。

前から困っている点で、とらいえずいちいち書いて対応していますが、
見ていて汚いので書き直したいと思っています。
気長に待っていますので、どなたか対策をご存じの方はレスよろしくお願いします。
898デフォルトの名無しさん
2015/04/12(日) 03:07:38.87ID:UeaTPkyU
auto f = (Component::typeid)->GetField("events", BindingFlags::NonPublic | BindingFlags::Instance);
auto v = f->GetValue(checkBox1);
f->SetValue(checkBox2, v);

でふるまいが同一になるけど。
899デフォルトの名無しさん
2015/04/12(日) 03:39:58.42ID:DBf5x0AF
>>898
お早い回答ありがとうございます。
こちらで確認した結果、確かに動きました。

(Component::typeid) のところを私は Component::GetType() にしていたのが敗因のようです。
見よう見まねでやっているため、実はここら辺のところがいまいち分かっていません。
お手数をおかけ致しました。また、ありがとうございました。
900デフォルトの名無しさん
2015/04/12(日) 03:49:39.70ID:UeaTPkyU
Component::GetType() は Form の中でなら GetType() と同じ。
C++で親クラスのメソッド呼ぶときの文法よ。
901デフォルトの名無しさん
2015/04/12(日) 10:00:53.76ID:DBf5x0AF
>>900
了解です。ありがとうございます。
FormがComponentを継承しているのを関知していませんでした。
902897
2015/04/15(水) 19:57:16.10ID:F8+sQhgK
>>898
これ、少なくとも numericUpDown の ValueChanged イベントはコピーできないことが分かりました。
その他は不明です。
元々このやり方はどのドキュメントにも書いていないらしいので、文句は言えないのですが、
どなたか解決策をご存じであれば教えてください。

なお、Button の Click イベントについては、また別の解を見つけました。
似たようなものですが、keyが必要なようです。
http://stackoverflow.com/questions/293007/is-it-possible-to-steal-an-event-handler-from-one-control-and-give-it-to-anoth
ただ、Button Click 自体はこちらで試す限り、 >>898 でコピーできています。
903デフォルトの名無しさん
2015/04/29(水) 20:01:07.13ID:3xtog1sc
マネージクラスのポインタを取得(pin_ptr)し、ネイティブクラスのポインタにキャストする方法を探しています。

class NativeClass
{
 int Hoge;
};

[StructLayout(LayoutKind::Sequential)]
public ref class ManagedClass
{
private:
 int mHoge;

public:
 property Int32 Hoge { Int32 get() { return this->mHoge; } }
};

mHogeがinternalの場合は下記でできますが、privateの場合はどう書けば良いのでしょうか?

ManagedClass^ managedClass = gcnew ManagedClass();
pin_ptr<int> pManagedClass = &managedClass->mHoge;
NativeClass* pNativeClass = (NativeClass*)pManagedClass;
904デフォルトの名無しさん
2015/04/29(水) 23:24:10.23ID:wtD4uRPe
property const Int32% Hoge { const Int32% get() { return this->mHoge; } }
にすれば、&managedClass->Hoge が interior_ptr<const int> になるから後は適当にキャストすればいいんでは。
905デフォルトの名無しさん
2015/04/30(木) 23:38:42.52ID:EZeUEJ9k
>>904
返信ありがとうございます。
トラッキング参照のプロパティはC#側で扱えなくなってしまうので避けたいです。
フィールドを参照しないと無理みたいなので、mHogeを公開するようにしようと思います。
ありがとうございました。
906デフォルトの名無しさん
2015/05/01(金) 20:25:15.13ID:1uBqK3bl
知ってるかもだけど、ManagedClass が value class, value struct なら
pin_ptr<ManagedClass> を reinterpret_cast<NativeClass *> するのは安全だったはず…
907デフォルトの名無しさん
2015/05/08(金) 23:36:54.66ID:V8hi9yRP
MessageBoxを親の中央に表示する簡単な方法はないですか?
自分でフォームを作ってしまえばいいんでしょうか?
最近までVC++6.0でMFCしか触ったことない自宅へぼプログラマです
908デフォルトの名無しさん
2015/05/09(土) 21:01:16.72ID:sbTRo4x2
フックでメッセージボックスのハンドルを取得して移動するだけ
909デフォルトの名無しさん
2015/05/19(火) 18:58:05.23ID:bujHJjw6
.NET Framework 4 で C++/CLI 混在モード アセンブリを使用すると、スレッドの生成・終了時にメモリ リークが生じる問題について
http://blogs.msdn.com/b/jpvsblog/archive/2015/05/18/mixedassembly-thread-leak.aspx
910デフォルトの名無しさん
2015/05/20(水) 10:30:15.88ID:ugJdOWTQ
うちのPCだと4.5.2が入らないんだけども
くだすれC++/CLI(初心者用)part2YouTube動画>1本 ->画像>4枚
911デフォルトの名無しさん
2015/05/20(水) 22:52:40.74ID:2T6/P0Lm
>>910
そうそう、起動時なんか構成に失敗しましたとかでて毎回復帰がかかっている
912デフォルトの名無しさん
2015/05/20(水) 23:36:56.86ID:DchNMAYq
休日プログラマです。

環境:Visual Studio 2012 express
SQLサーバ:SQL Server 2012 express

ODBCドライバを用いて、フォームから検索ワードを取得し、
C++/CLIでのプリペアドステートメントを発行して結果を取得したいのですが、
それを用いたlikeなど部分検索SQLの結果取得でハマったまま先に進めません。

SQLCHAR search[255];
std string sql = "select hoge, strhoge from hogetbl where strhoge like \%?\%";
SQLPrepare(hstmt,
(SQLTCHAR *) sql.c_str(),
,SQL_NTS);
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,sizeof(search),0,search,NULL);
SQLExecute(...

のように書いているのですが、プログラム上では何をやってもSQL_NO_DATAが返ります
あたりまえですがSQLそのものはServerのクエリで確認したところ通っています //?の所を'(任意文字列)'にした結果

また、SQL構文をLIKEの代わりにSQLのCHARINDEXを用い項目を増やして使ってみたのですが、同じようにダメでした。
// case when charindex(?,strhoge) > 0 then 1 else 0 end as searchflg ....
// where searchflg = 1 のように

ここには書き戻しできないのですが、escape句も試用したことがありますが、無理でした。
で、このLIKE以外は問題なく動きます。
また、他の機能はほとんどODBCで書いちゃったのでADOはやりたくないです。
何かいい方法ありませんでしょうか。よろしくお願いします。
913デフォルトの名無しさん
2015/05/20(水) 23:56:15.34ID:/RusctZx
普通 '%' + ? + '%' とか書くんじゃないの。
914912
2015/05/21(木) 00:02:48.74ID:6QiHBSDD
ああ、言い忘れていてすみません。
それもやりましたが、ダメでした
915デフォルトの名無しさん
2015/05/21(木) 00:43:36.74ID:vrFpc8wu
コマンドには like ? と書いて、パラメータに%を指定するのはどう?
916912
2015/05/22(金) 01:16:43.85ID:YmYYGDUM
うーん、それもやってみます。
あと、他の方はこうした事でハマったりは特にありませんでしたでしょうか。
書いてるのが一人でやってるのもあって、本当にプリペアドでの部分検索が可能かどうかが少し不安です
もちろん、突き詰めればなんでも可能なのでしょうけれども……
917デフォルトの名無しさん
2015/05/22(金) 02:49:24.89ID:O8zMbXMa
SQLTCHAR* 型に std::string のポインタ渡してるのは、問題ないの?
918912
2015/05/29(金) 21:54:54.52ID:ky+HtZPS
912です。>>917さんの意見も含め、別の観点からもみてみたところ
・・・非常にお恥ずかしいオチになったのですが、解決しました。

問題はコードではなく、BindParameter時のCHAR検索する箇所(SQL_CHAR)が
DB側でいつの間にかvarcharになっていたのが原因でした。合わせてやると簡単に使えるように…
みなさん、お騒がせして申し訳ありません。
919912
2015/05/29(金) 22:03:04.73ID:ky+HtZPS
>>918
×CHAR検索する箇所(SQL_CHAR)がDB側でいつの間にかvarcharになっていた
○CHAR検索(SQL_CHAR)としていたのに、対象のDB側の項目の型がvarcharになっていた
920デフォルトの名無しさん
2015/09/15(火) 21:43:10.94ID:sv5Bl9TI
質問です。

上手いことsscanfを.NETで実装する方法ってありますか?
ポインタが上手く渡せず困っています。

なお、正式に習ったわけではなく、見よう見まねでやっているため、
単純なところで勘違いがあるかもしれませんが、その時も指摘して頂けたら助かります。
921デフォルトの名無しさん
2015/09/15(火) 21:43:39.42ID:sv5Bl9TI
【これまでの経緯】
プログラムが間延びしてきたため、
これまで個別にちまちま書いていたファイル読み出し部分をsscanfで纏めて整理しようとしています。
ググッたところ、.NETにはsscanfそのものはなく、どうやら皆さん苦労しているようでした。
http://stackoverflow.com/questions/4223917/c-sharp-equivalent-of-c-sscanf
http://stackoverflow.com/questions/492262/is-there-an-equivalent-to-sscanf-in-net
http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net
ただ自分の場合はcsvの読み出しで順番と対象だけ指定できればいいので、
以下のように組んでみました。(ただしまだ動かしていないので動かないかもしれません)

private: int sscanf_csv(String^ str, String^ format, array<void**>^ pointers){
array<String^>^ strs = str->Split(',');
array<String^>^ fmts = format->Split(',');
int i=0;
while (i<strs->Length && i<fmts->Length) {
if (fmts[i]=="int") {
if (!Int32::TryParse(strs[i],(int%)pointers[i])) break;
} else if (fmts[i]=="double") {
if (!Double::TryParse(strs[i],(double%)pointers[i])) break;
} else if (fmts[i]=="float") {
if (!Single::TryParse(strs[i],(float%)pointers[i])) break;
} else if (fmts[i]=="string") {
*(interior_ptr<String^>)pointers[i] = strs[i];
}
i++;
}
return i;
}

Stringのところは怪しいですが、intとdoubleとfloatはネイティブなら問題ないと思っています。
922デフォルトの名無しさん
2015/09/15(火) 21:44:06.10ID:sv5Bl9TI
【問題点】
・マネージドのクラスではメンバにネイティブ配列が使えないため、
書き込み対象にどうしてもマネージド配列の要素を指定することが必要となりますが、
interior_ptrをvoid**にキャストできません。
仕様上、interior_ptr → pin_ptr → int → void** にはキャストできる(っぽい)のですが、
 ・interior_ptrは配列に出来ない(array<interior_ptr<int>> も interior_ptr<int> hoge[] もエラー)
 ・pin_ptrも同様に配列に出来ない。さらにローカル変数として宣言しないと駄目っぽい。
ため、これらを回避するためにはベタにコードする必要があり、余計に見にくくなります。
・そもそも void** にしているのは可変長引数がいまいちだったからなのですが、
上記のように interior_ptr が配列に取れないから多分可変長も無理です。
・自分の場合は1行につきせいぜい10個程度の代入なので最悪べた書きでラップしてもいいのですが、
interior_ptr<Type>は型指定があり、型の順番は変更したいのでこれも厳しいです。

【出来ればいいなと思っている記述】
array<int> ary_int = gcnew array<int>(10);
array<double> ary_double = gcnew array<double>(10);
sscanf_csv(line0, "int,double", gcnew array<void**>(2){&ary_int[0], &ary_double[0]});
sscanf_csv(line1, "double,int", gcnew array<void**>(2){&ary_double[1], &ary_int[1]});

という感じです。良い案があればお願い致します。
923デフォルトの名無しさん
2015/09/16(水) 11:35:11.25ID:L4xvtXb4
>922
https://gist.github.com/anonymous/db1149cb0a1afbd1f6d8

書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
auto x = gcnew CSV(line1);
ary_int[0] = x->read_int(0);
ary_double[0] = x->read_double(1);
924デフォルトの名無しさん
2015/09/16(水) 21:00:32.05ID:sRYuFuHf
>>923
おお、ありがとうございます。
template<typename ... Ts>でTsはバラバラでもいけるんですね。知りませんでした。
あと、再帰で一つずつ剥がすのも思いついていませんでした。ググルと定番のようですがorz

> 書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
ちなみにその記述は今の状態です。
ただ、これだと抽象度が低いため記述量が増え、ちょっと保守性に問題を生じ始めています。
結局のところ、同じフォーマットの行を大量に処理して配列に突っ込むだけなので、
最終的には「ファイル名」「フォーマット」「対象配列」でよく、最上位からは(型情報ありなら)

parse_csv(filename, &ary0, &ary1, ...);

の1行にしたいのです。その下のファイル→行のところでコメント等をはがし、
delegateでparse_lineを呼ぶ算段でしたが、ポインタが渡せずに困っていました。
大変助かりました。ありがとうございました。


と思ったのですが、parameter pack はC++11の機能で、VS2013以降からのようです、、、
VS2015でそちらのコードが動作するのを確認しました。
自分が使っているのはVC++2008なので、この機会に移行を考えますorz
当面はせいぜい10個なのでunpackしたものを自分で書きますが、、、
925デフォルトの名無しさん
2015/09/16(水) 21:06:19.21ID:sRYuFuHf
すいません、やや話が前後しているので念のため一部訂正します。

元々 delegate から parse_line を呼ぶつもりでしたが、
最終的には可能なら parse_csv に纏めようとしています。
ただ parameter pack が使えないとやっぱキツいですね、、、
926デフォルトの名無しさん
2015/09/16(水) 22:14:50.26ID:L4xvtXb4
行によってフォーマットが違わない(ファイルによっては違うのかな)のなら、
行をパースした結果の型を定義しちゃったほうが保守性は上がると思うけど、縦方向の配列が必要なんだろうなぁ。
927デフォルトの名無しさん
2015/09/16(水) 22:41:51.71ID:sRYuFuHf
>>926
はい、ファイルによってフォーマットは違い、行では変わりません。
演算ソースを読み込むのに使うので、速度は遅くても構いません。

ただ一部、各行の先頭数値によって行のフォーマットを変えている部分があるため、
元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
ただこれはソースファイルが増えるのが面倒なので一部にパッチを当てたからであり、
きちんと修正すれば parse_file に一本化できるので、この方向で検討中です。

実は縦方向の配列は不要で、各行での構造体化も検討中です。
928デフォルトの名無しさん
2015/09/16(水) 22:55:17.14ID:sRYuFuHf
すいません、また細かいところで間違えました。一応念のため訂正しておきます。

× 元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
○ 元々は上位で parse_file を呼び、対象オブジェクトのメンバ関数を delegate で渡し、
 メンバ関数内で先頭数値を見てフォーマットを区別し、そこから parse_line を呼ぶつもりでした。(現時点で動作中)

今は上位で メンバ関数 Hoge.init(filename) を呼び、init内で全部済ませる方向です。

これまで全くオブジェクト指向をしておらず、それでも大して問題なかったのですが、
いい加減無理になってきたので、今更ながら粗結合化をやろうかというところです。
929デフォルトの名無しさん
2016/02/15(月) 00:11:59.92ID:BuMWAFI4
「System.Collections.Generic.List<T>型」を「LPARAM型」に変換する方法、
またその逆の変換をする方法、を教えて下さい。

List<T>型をLPARAM型に変換する必要があり、
その後で、List<T>型をLPARAM型から再取得する必要があるのです。
930デフォルトの名無しさん
2016/02/15(月) 01:15:53.23ID:Rn1JhND3
「その後で」がスコープを抜けた後を意味するなら、そのような方法はありません。
931デフォルトの名無しさん
2016/02/15(月) 07:40:32.53ID:7IG9/wk9
marshal_as を実装すればいいと思うよ。
LPARAM って実体は void** じゃなかったっけ
932デフォルトの名無しさん
2016/02/16(火) 07:41:35.26ID:uJkK1HCP
>>931
言語はC++ cli です。

msclr::interop::marshal_context mct;
LPARAM lParam = mct.marshal_as<LPARAM>(this->child_window_list);
↑で実装すると↓のコンパイルエラーとなります。
error C4996: 'msclr::interop::error_reporting_helper
<_To_Type,_From_Type>::marshal_as':
This conversion is not supported by the library or the header file needed for this conversion is not included. Please refer to the documentation on 'How to: Extend the Marshaling Library' for adding your own marshaling method.

またList<T>型をLPARAM型に再変換する方法が分かりません。
933デフォルトの名無しさん
2016/02/16(火) 09:54:31.98ID:jv0CDqht
経緯を見ずに
子ウィンドウリストの扱いとして妥当とは思えないが
934デフォルトの名無しさん
2016/02/16(火) 15:12:48.61ID:l0bB/6+q
LPARAMの使い道がEnumWindowsの第二引数とかだったらやりようがあるけど、そういうコードではない?
935デフォルトの名無しさん
2016/02/17(水) 07:42:51.53ID:6vFi9dMa
解決しました。
c++の世界で一時変数を設けて、ポインタを渡し、reinterpret_castで復元する、という方法です。
936デフォルトの名無しさん
2016/02/18(木) 02:54:21.18ID:/SXXA+KN
(たぶん解決してないなー、と皆が思ってる)
937デフォルトの名無しさん
2016/02/20(土) 19:06:01.50ID:HOPxSzsv
質問です。
+= で追加したフォームのイベント順を入れ替えたいのですが、やり方はありますか?

条件
1. デザイナは使いたい(既に大量に使っている)
2. 格好悪い書き方で全く問題ないが、全体的に書き直すのはNG

状況
numericUpDown->Changed 等に対してデザイナ上から再描画関数を割り当てています。(A)
(波形を表示する時のボリュームのような使い方です)
デザイナではフォームはデフォでは static でないため、
内部の別クラスからは numericUpDown->Value 等にはアクセスできません。
(自分でstaticと書いてコンパイルを通すことは出来ますが、デザイナで変更するたびに戻されます)
そこでイベントに別関数も割り当て、そこで内部 static struct に Value 等を書かせ、(B)
別クラスからはこの static struct を参照しています。

このとき、AとBの経路が完全に分離しているうちはよかったのですが、
統合していくうちにA内部から別クラスを呼ぶことが発生し、 static struct が未更新なのでバグっています。
イベントは追加順に呼ばれるようです。
デザイナで指定したイベント関数はフォーム生成時に指定される為、必ず A->B の順で呼ばれることになります。
これを B->A の順に入れ替えたいのですが、方法はありますか?
938デフォルトの名無しさん
2016/02/20(土) 19:06:30.87ID:HOPxSzsv
プログラムイメージ
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += 再描画関数; // (A)
someForm->Changed += struct更新関数; // (B)

static ref struct FormData {
Decimal someForm_value;
} formData;

function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
formDataを使う別クラスを使用 // formDataは未更新なのでバグる
}

やってみたこと
numericUpDown->Changed = Delegate::Combine(struct更新関数, 再描画関数); // 上書き再設定しようとしたが = は使えない
どうやら +=(add) と -=(remove) しかないので、(中身を参照できない)
一つずつ array<Delegate^> に吸い出して += で希望順にちまちま再設定も出来そうにありません。
全部の(A)の頭に(B)を追加してイベント経路を一本化すればいいのは分かりますが、
これは大量に書き換えが必要となります。
今現在(B)は後付で全てのフォームを列挙して追加しています。
この部分だけの変更に留められるのならそうしたいのです。
リフレクションも試しましたが、以下でeventInfoは取れますがその先に進めません。
System::Reflection::EventInfo^ eventInfo = (NumericUpDown::typeid)->GetEvent("ValueChanged");

以上、よろしくお願い致します。
939デフォルトの名無しさん
2016/02/21(日) 05:32:00.14ID:SNLM1Bng
> デザイナではフォームはデフォでは static でないため、
> 内部の別クラスからは numericUpDown->Value 等にはアクセスできません。

ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。

FormDataはstaticにせずForm1のメンバにして、その中身が変化したときのイベント
(ここに再描画関数を += して、EventArgsでパラメータを渡す)を足すのが良いのでは。
940デフォルトの名無しさん
2016/02/21(日) 12:45:43.68ID:Ur7lNYiz
>>939
回答ありがとうございます。

それでも解決しますが、それは全面改訂になります。
既に(B)を全ての(A)の頭に入れるという解決策はあり、それの方がデグレードの危険が少ないです。
ただ、リフレクション等で(B)と(A)の順を入れ替えられると、数行の変更で済み、デグレードは発生しません。
だからそれを探しています。

Form1と別クラスCを追加して再度説明します。
全てはForm1の内部クラスです。継承はしていません。
941デフォルトの名無しさん
2016/02/21(日) 12:46:15.32ID:Ur7lNYiz
【今】
ref class Form1{
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += 再描画関数; // (A)
someForm->Changed += struct更新関数; // (B)

static ref struct FormData {
Decimal someForm_value;
} formData;

function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
// struct更新関数() // (B)を += せずにここに入れれば解決する、ただし変更箇所多数
formDataを使う別クラスCを使用 // formDataは未更新なのでバグる
}
ref class 他のクラスC {
描画用データ作成 // ここで someForm->Value を使いたいが直接には出来ないので仕方なく static formData を確認
}
};

問題点:
クラスCから someForm->Value が取れないので static struct FormData で誤魔化す。
ただしこれだとイベント順が「描画(A)」→「データ更新(B)」となり、描画内容が1イベント分ずれる。
このため、(B)と(A)の処理順を入れ替えたいが、方法が見あたらない。
942デフォルトの名無しさん
2016/02/21(日) 12:46:44.50ID:Ur7lNYiz
>>939の提案】
ref class Form1{
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += struct更新関数; // (B)

ref struct FormData { // static ではない
Decimal someForm_value;
} formData;
formData->someForm_value->Changed += 再描画関数; // (A) // 自作クラスFormDataにChangedイベント追加

function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
formDataを使う別クラスCを使用 // formDataは常に更新済み、formDataを呼び出し時に渡す
}
ref class 他のクラスC {
描画用データ作成 // formData を参照
}
};

問題点:
イベント処理順は「データ更新」→「描画」と正しく固定される。
ただし全面改訂になる。
943デフォルトの名無しさん
2016/02/21(日) 12:47:27.88ID:Ur7lNYiz
> ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。
結果: 描画に使われるデータが1イベント分ずれる
原因: イベント順が「描画」→「データ更新」だから
何か間違いはありますか?

データ構造としては本来は class Form1 : FormData となるべきため、
static で使うことも問題ないと思います。
既に記述されて動いているプログラムがあり、それを変更しようとしています。
データ更新→描画にプログラム上で固定するのはスクラッチからなら当然ですが、その場合にも結局
「どのデータが更新されたか→どの部分を再描画する必要があるか」を記述する必要があります。
この部分は今既にデザイナ上にあり、動いているので、それをそのまま利用する方法を探しています。
944デフォルトの名無しさん
2016/02/21(日) 20:54:36.76ID:SNLM1Bng
結果:アクセスできない
×原因:staticじゃないから
○原因:設計が悪いから

http://www.c-sharpcorner.com/uploadfile/b81385/how-to-change-order-of-event-handlers-execution-at-run-time/

リファクタ無理だというならここにあるC#のコードをC++/CLIに移植すればよいのでは。
945デフォルトの名無しさん
2016/02/22(月) 00:23:23.86ID:GxEKSJ9o
リンク先のコードでイベント順を入れ替えることが出来ました。
ありがとうございました。

プログラム構造については色々意見はあるとは思いますが、
最初から固まっている仕様に対して一度作って終わりなら誰も苦労しませんよ。
複数有る解決策のうち、今現在見える範囲での最適解をその都度選んでいくしかありません。

A. イベント順を入れ替えても
B. 各イベントハンドラの頭にデータ更新を挿入しても
C. 他クラスに対していちいちForm1オブジェクトを渡してstaticではなくしても

制御フローは同じです。(切り出し面が異なるだけ)
今後FormDataクラスや「他のクラスC」はForm1外でも使う可能性があるのと、
デグレードに対するデバッグの困難さを考えて、今回はAを選んでいるだけです。

まあいずれにしても、解決しました。
ありがとうございました。

なおリンク先、最後に小言が書いてありますが、完全に同意ですよ。
本来はイベントテーブルを参照できるメソッドが有ればいいだけです。
946デフォルトの名無しさん
2016/02/23(火) 04:03:35.79ID:zeSeypn1
本来はまともな設計をすればいいだけだよ
+= した順番に呼ばれるのもたまたまそういう実装になってるだけでしょ
947デフォルトの名無しさん
2016/02/29(月) 00:09:05.42ID:MKA4zt/L
イベントの実行順はaddされた順だと仕様化されてる
948デフォルトの名無しさん
2016/04/25(月) 16:38:42.40ID:FkG7uZgr
質問失礼します。

'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' を読み込みました。Cannot find or open the PDB file
'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' をアンロード

このアンロードはどうやって止めるのでしょうか?

実行した際に、dll内のメソッドを参照できないようで、以下のエラーとなります。
ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン
ブリ 'hoge.dll'、またはその依存関係の 1 つが読み込めませんでした。
指定されたモジュールが見つかりません。
場所 hoge.hogeclass..ctor()
場所 main(Int32 argc, SByte** argv)
場所 _mainCRTStartup()
コンパイルはできています。

よろしくお願いします。

(なんか急にできなくなった気がします。前は、問題無だったはずなのになぁ)

追記

他にも、以下のような、謎のメッセージも出ています。

'abc.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'abc.exe': 'ImageAtBase0x10000000' をアンロード

よろしくおねがいします。
949デフォルトの名無しさん
2016/04/26(火) 04:22:33.77ID:GzSuYmQg
「cannot find or open the pdb file c++」で検索!
950デフォルトの名無しさん
2016/04/26(火) 10:52:45.55ID:wKiIgsat
アンロードは気にするな
dllの場所をあちこちコピーして試してみ
951948
2016/04/27(水) 15:26:32.30ID:pZs1yVgK
思い出しました。

ildasm,ilasmをつかって、その該当のdllのPCBを作りました。
(dllの中まで、デバッガで追いかけるためです)
あたらしくコンパイルしたDLLへ、前のPCBがなかったものから、リンクを張り替えました。

そしたらエラーが出るようになった気がします。
(あくまで、気がするだけです。なんら、確かな関連はわかりません)

しかし、現在は、以前のオリジナルのDLLをリンクしています。
その状態でエラーが出ています。

>>950
回答ありがとうございます。

/LIBPATH の場所
exeと同じフォルダ
program filesフォルダのvisualSTUDIOフォルダ

それらに置き直しました。が、駄目でした。
952デフォルトの名無しさん
2016/04/27(水) 16:32:56.37ID:P7l59W4J
xyz.dllが依存している何かのDLLが見つからないんじゃないの
dependency walkerとかcygwinのlddとかで確認してみたら
953デフォルトの名無しさん
2016/04/27(水) 17:53:59.20ID:VZ0i7jHG
参照設定に入れてるんじゃないの?
一旦外して参照設定しなおしてみては
954948
2016/04/27(水) 18:59:04.66ID:1t3mn4AU
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\newxyz.exe' を読み込みました。シンボルが読み込まれました。
'newxyz.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
-----------------------------------------省略
'newxyz.exe': 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Culture.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
'newxyz.exe': 'C:\WINDOWS\assembly\NativeImages_v4.0.30319_32\mscorlib\cece9d0256e18427b64587ba690605d4\mscorlib.ni.dll' を読み込みました。シンボル ファイルにネイティブ シンボルがありません。
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll が読み込まれました。シンボルが読み込まれました。
ー---------------省略
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll が読み込まれました。シンボルが読み込まれました。
'newxyz.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'newxyz.exe': 'ImageAtBase0x10000000' をアンロード
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\xyz.dll' が読み込まれました
'newxyz.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'newxyz.exe': 'ImageAtBase0x10000000' をアンロード
----------------続きがあります
----------------続きがあります
955948
2016/04/27(水) 19:01:17.20ID:1t3mn4AU
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\netClient.dll' を読み込みました。Cannot find or open the PDB file
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\netClient.dll' をアンロード
newxyz.exe の 0x7c812aeb (kernel32.dll) で初回の例外が発生しました: Microsoft C++ の例外: EEFileLoadException (メモリの場所 0x0012d0e8)。
----------省略
'System.IO.FileNotFoundException' の初回例外が newxyz.exe で発生しました。
'newxyz.exe': 'C:\WINDOWS\system32\version.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
'System.IO.FileNotFoundException' のハンドルされていない例外が newxyz.exe で発生しました。

追加情報: ファイルまたはアセンブリ 'netClient.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたモジュールが見つかりません。

'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました
スレッド 'メイン スレッド' (0xe48) はコード 0 (0x0) で終了しました。
スレッド 'Thread::intermediateThreadProc' (0xec8) はコード 0 (0x0) で終了しました。
スレッド 'HelperCanary::ThreadProc' (0xec4) はコード 0 (0x0) で終了しました。
プログラム '[3652] newxyz.exe: ネイティブ' はコード 0 (0x0) で終了しました。
プログラム '[3652] newxyz.exe: マネージ (v4.0.30319)' はコード 0 (0x0) で終了しました。
956948
2016/04/27(水) 19:13:09.09ID:1t3mn4AU
>>952
>>953
みなさん、ありがとうございます。

952さんのおっしゃる方法でいけました。

dependency walkerで、不足していたDLLが発見できました。

VSで、もし不足DLLがあるなら、教えてくれるはずだ」という、
思い込みが駄目でした。

3日*5時間=15時間

ぐぐたり、最インストして、時間をつぶしました。

(エラーコードを貼り付けたけど、無駄になっちゃた)
957デフォルトの名無しさん
2016/05/01(日) 16:47:47.97ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
1w
958デフォルトの名無しさん
2016/10/22(土) 11:55:32.76ID:ksoZ+Sju
大分人が居ないみたいだけど、質問させてください

archlinux(x86_64)+gtkmm3(3.22.0)+epoxy(1.3.1)+glsl上のOpenGLで隠面消去をしたいのですが
glEnable(GL_DEPTH_TEST)しても上手く行きません。fragment shaderの部分で書くのでしょうか?
もしサンプルなど有りましたらURLを教えて頂ければ幸いです。

OpenGL、GLSL周りの情報は何処を見て何処を出せば良いのか分からず不明ですが宜しくお願いします

少し問題の発端を・・・
以前はgtkmm3+glewで某ホームページで点にテクスチャを貼って大きさを変える方法を利用してました
(1) gtkのアップデート → context周りが上手く機能せず
(2) GLAreaクラス使用する → オプションとか無効なものが発生、描画命令が上手く動かない
(3) GLSLを使うようにする → アルファテストは何とか解決、隠面消去が実装方法が分からず
※オンボード(core i7 4771)のグラフィックを使っているせいかGLSLのバージョンも1.3以上にできないみたいです
959デフォルトの名無しさん
2016/10/22(土) 12:52:21.05ID:O48rD9qT
おおいたじん
960デフォルトの名無しさん
2016/10/23(日) 21:52:15.85ID:15UOA6Kp
わかったぁぁぁぁ!!!

glEnable( GL_DEPTH_TEST );
ではなく
set_has_depth_buffer();
でデプスバッファを有効にするみたいだ
こんな所まで変える必要はないだろうに・・・
961デフォルトの名無しさん
2016/10/23(日) 23:42:58.00ID:dKDci2rB
すれ違いな事を分かれよw
962デフォルトの名無しさん
2016/10/24(月) 00:49:08.07ID:B3VSjKub
いや誘導されてきたしw
普通のくだすれ落ちてるし
スレ立てるまでもないスレの方が良かったのかな?
963デフォルトの名無しさん
2016/10/24(月) 08:15:21.68ID:q3Pt9cuW
「くだすれ行け」って言われてこのスレに誘導されたと思ったんなら頭悪すぎるわ。
964デフォルトの名無しさん
2016/10/24(月) 10:37:31.81ID:9xygNeDa
>>963
ほんそれ
965デフォルトの名無しさん
2016/10/24(月) 12:49:59.59ID:e0+jKQlJ
まあ /CLI の文字はわからない人には見えないからな
966デフォルトの名無しさん
2016/10/24(月) 15:51:40.64ID:9xygNeDa
くだすれC++だったとしてもスレ違い
967デフォルトの名無しさん
2016/11/03(木) 11:44:11.90ID:s4829peE
C#で言うオブジェクト初期化子に相当する機能ってC++/CLIに用意されているんですかね?

getアクセッサしかないプロパティをコンストラクト時に初期化して使うようになっている
ライブラリがあったんですけど、もしかしてそういうクラスはC++/CLIから使えない?
968デフォルトの名無しさん
2016/11/03(木) 16:15:49.29ID:997Gjnyn
{ hoge : 774, fuga : 37564 } { .hoge = 774, .fuga = 37564 } みたいなやつ?
俺も2015で以前に探したけど見つからなかったな

どうなんだろうね、あるのかな
969デフォルトの名無しさん
2016/11/03(木) 16:49:50.16ID:s4829peE
それです。
VBには追加されているみたいだけど、C++/CLIは見捨てられているなぁ。
970デフォルトの名無しさん
2016/11/03(木) 17:54:07.51ID:997Gjnyn
VSの作りからして、それはないんじゃないかな
MFCでリボンじゃない方のドッキングのプロジェクト作るとわかるけど、
あれがものの見事にVSのドッキングだからね
かつデザイナは当然ユーザが生成する(した)フォームは(特にユーザコンポーネント)
.NETでビルドされたものをデザインタイム用に直接呼び出してる
(デザイナでエラーが出るだのインテリセンスが良く落ちるだの言ってるのは
VSの作りを”なんとなく”ですら理解できてない証拠)

MSとしてはVSで次のVSを作ったりする為にもC++/CLI作りこみたいけど
非常に言語体系が複雑かつ莫大な工数が必要で追いついてないんじゃないかなと妄想
既に市場のソフトウェアの価格破壊はとっくに完了
後はストアかUbuntuOnLinuxでサーバ市場か開発シェアで食い込むしかなさそうだし
971デフォルトの名無しさん
2016/11/08(火) 19:00:23.92ID:poFN3OHs
亀レスだが何となく妄想が閃いた

MS主導とはいえ、C++/CLIってなんかの国際的な規格みたいなので規定された
れっきとした規格だからおいそれと追加できないんだ
んで、C#もC++も構造体(クラス)の初期化子持ってるから昔みたいな適当に
「MS独自の拡張でーす」とかやっちまうと収拾つかなくなりそう

とはいえ { 0, ,1 2 } は後からメンバ追加したとき修正忘れとかトラブルの元だし
構造体宣言→ZeroMemory→b=1; c=2;はエイリアス切らないとconst修飾できねーし
(エイリアスはヒューマンエラーの元、constじゃないと最適化掛からないケースあり)
さっさと対応して欲しいとこではある
972デフォルトの名無しさん
2016/11/08(火) 22:29:24.78ID:ygc/1hMy
混在アセンブリが作れるのはC++/CLIだけだし非常にもったいないと思うんだが、
MS自身も既にグルー用途以外での新規採用を推奨してなかったんじゃないかな。
もうちょっと力入れてくれてたらMFCなんか捨てられたのに。
973デフォルトの名無しさん
2016/11/08(火) 22:58:35.07ID:poFN3OHs
https://support.microsoft.com/ja-jp/kb/3001686
これかな

そのわりにはVSには使ってんだよな
MFCしながらマネージコードをデザインタイムで呼び出してフォーム表示しなきゃならんから
仕方ないのかも知れんけど
974デフォルトの名無しさん
2016/11/09(水) 11:18:35.06ID:YhV0EIhT
さりげなくVS2015でMFC進化してたし、MFCのダイアログでスプリッタとか
(無理やり空のCFrameWnd貼り付けるとタブ移動できない)
ステータスバーとか(.NETみたいにツールバーもどきとしても使える)
.NETでしか使えないコントロールが軒並みMFCにきてくれたりするだけでもいいんだけど
これから先C++/CLIのサポートどうなるんだろ
多少見てくれやUIが前時代的でもMFCの方が安定かなぁ
975デフォルトの名無しさん
2016/11/21(月) 13:25:25.73ID:YpzsObn3
MSはCLI推奨せずにC#やVB推奨してっけど、将来のOffice系何で作るんだろな
難読化してもその内ソースのオプティマイザ出てきてイタチごっこになりかねんし暫くはMFCかね
976デフォルトの名無しさん
2017/01/15(日) 21:23:48.23ID:rvU554U6
C++/WinRT なんてものまで出てきて、C++/CX も先が短そう
WTL の再来っぽくていい感じだけど
977デフォルトの名無しさん
2017/01/15(日) 22:42:58.04ID:NxAjVWZ/
どれか一本に絞ってくれんと安心して規模がでかいモノに使えんのだよな
978デフォルトの名無しさん
2017/01/16(月) 17:58:46.48ID:YH2Bx58z
うむ
979デフォルトの名無しさん
2017/01/26(木) 18:08:08.58ID:o7A7h/DB
コロコロ変えて無駄な需要を作り出すのもM$の仕事
980デフォルトの名無しさん
2017/01/30(月) 00:52:58.91ID:WdnkMvUJ
C++/WinRT をちょっと使ってみたけど、これいいね
標準C++で WinRT の COM 定義をインクルードして普通に使えるのはいい
癖さえつかめば、あとはWinRTのお作法だけってかんじだわ
981デフォルトの名無しさん
2017/01/31(火) 15:17:17.52ID:KYCEEpNK
une
982デフォルトの名無しさん
2017/02/01(水) 02:50:30.54ID:L9Dup9x5
UWPとか限定せずに、C++/CLIのまま突っ走って欲しかったんだがなぁ
983デフォルトの名無しさん
2017/04/28(金) 09:31:56.32ID:O7EFHLbG
フォームアプリ用のプロジェクトのテンプレどっか落ちて無い?
毎回手動で設定するの面倒臭い。
984デフォルトの名無しさん
2017/05/20(土) 14:40:24.30ID:EW+Ld+8h
アンマネージ側でvector<>に格納されたデータをマネージ側に返すには
gcnewで別にメモリ確保してコピーしてから返す方法になるんですか?
(一時的に倍メモリ使うのが気になります)
985デフォルトの名無しさん
2017/05/20(土) 15:14:59.81ID:elFKlvRa
俺はあまり詳しくないけど、「返す」ってのが普通は要らないと思う。
マネージドからアンマネージドは直叩き出来るし、普通はそうする気が。
切り替えのオーバーヘッドがーみたいな記述もどこかにあったけど、
俺がやっている限りでは無駄命令は出ずに直叩きしてた。

逆にアンマネージドからマネージドも一応は直叩き出来るけど、
pin_ptrにしなければいけないし、可変長は多分無理。
STL/CLRにもvectorはあるけど、こちらだとアンマネージド側のソース変更が必要になる。
(*を^に変更)
だから一番楽なのは上記の「マネージドからアンマネージドを直叩き」だと思う。

なおコピーするのならそりゃ一時的には倍メモリ使うしかないでしょ。
986デフォルトの名無しさん
2017/05/21(日) 00:02:49.54ID:B5VLs+I5
collection_adapterの出番だ!って思ったら逆方向だったでござる
987デフォルトの名無しさん
2017/08/11(金) 18:57:30.61ID:F7GkAIq5
visual c++ express edition
(2010)で、
numericUpDown1 に、小数を入力(DecimalPlaces は、 1)できるようにしています。

コードから、

float suu;
(numericUpDown1 -> Value) =
 (float)suu;

が、エラー出ます。

suu と、numericUpDown1 を、整数にしておけば、エラー出ません。

小数で、入力するには、どうすればよいのですか?

m(__)m
988デフォルトの名無しさん
2017/08/11(金) 22:49:03.05ID:zXcmyaa1
エラーメッセージに書いてあるだろ。
989デフォルトの名無しさん
2017/08/14(月) 12:55:13.92ID:xjAbC9qa
カッコとかキャストとかわけわからずにやってんのか
System::Decimalにキャストしてみて
990デフォルトの名無しさん
2017/08/16(水) 04:12:40.72ID:UcOsqcC8
Cスタイルキャストが許されるのは小学生まで
991デフォルトの名無しさん
2017/08/18(金) 19:41:28.19ID:UHl99sa0
C++ って初期値を0にするって仕様化されていたっけ?
992デフォルトの名無しさん
2017/08/18(金) 19:50:42.62ID:G07FViaN
int a {};とすれば0初期化される仕様だったような?
993デフォルトの名無しさん
2017/08/18(金) 21:19:51.90ID:UHl99sa0
2010 だと、0x は使えないんじゃ?

まぁ、MSDN のコードを見れば解決する話だけど
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.numericupdown.decimalplaces(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-2
994デフォルトの名無しさん
2017/08/19(土) 15:20:13.68ID:vQyZjPpv
>>991
++は0にするんじゃなかったかな
コンパイルオプションでも変えられそうだけど
995アムドクラス 124.214.38.29
2017/09/12(火) 15:04:42.24ID:qh4uFSxq
>>803
言葉遊びじゃなく君が人の書き込を妄想で勘違いしてドヤ顔で噛み付いてきた挙句論点の違う馬鹿な屁理屈こねたってのが現実だよね?
それで負け惜しみか知らんが「こ、言葉あそびしたいだけだな(震え声」って言われてもね?

違うというなら
「多コア最適化が進めば必然的にryzanにも恩恵がある」
っていう書き込みのどこが思い込みなのかはっきり言えばいいじゃない
論点ズラす馬鹿な屁理屈こねたり負け惜しみ言ってないでさ?

>>809
また屁理屈ですか?
差が埋まるとか埋まらないとかの言い訳はいいからさ?
恩恵あるんだよね?じゃあそれは思い込みじゃないよね?
なんで君は思い込みどうこうとか言い出して噛み付いてきたの?

>何を言われても理解できない子なんだなあ

完全にブーメランで君の額に刺さってるよね
それでもまだ苦しい言い訳や屁理屈や負け惜しみ書き込むの?真性?
996アムドクラス 110.132.254.159
2017/09/12(火) 15:05:18.98ID:qh4uFSxq
それはお前の思い込みだ!!って思い込みで叩く
まさにアスペの症状そのままです
そして大概アスペ本人は自分が間違ってると認識すらないから
自分の非を認められず延々に論点ズラしや屁理屈こねてだから相手が間違ってると言い続ける
こういうのは相手にしないのが吉

>8700Kで走らせれば確実に2コア余るわけで[

おいおい
ゲームは今4コアメインだからって6コアCPUを使ったら2コア余るなんて馬鹿な事ほざく奴が
なんで自作板にいるんだ?まじで?釣りじゃなく本気で言ってんの?
本気なら真性じゃん
997アムドクラス 110.132.254.159
2017/09/12(火) 15:05:41.96ID:qh4uFSxq
>>815
>そうだねそれと同時にryzenの時代になっていくって事だよね
                ↓
>多コア最適化が進めば必然的にryzanにも恩恵があるという

これのどこに矛盾があるの?
「マルチ最適化が進めば必然的にryzenに恩恵がある=ryzen(もっと分かりやすくいえばマルチコア)の時代になっていく」
何の矛盾もないし言い換えですらない言ってる本質は同じなんだから
それを言葉遊びって自分が理解できない馬鹿ってだけだろ?

現時点でマルチ処理では7700Kより明らかにryzenは上で6コアの8700kだってまず勝てないだろうね
馬鹿がなぜか持ちだした4コアなら勝てるかもだけどさ
7700Kと比較するのに同価格帯じゃなく4コアryzen持ちだして何したいの?
つかそこまで論点拡大しなきゃ言い訳すらできない時点で馬鹿丸出しで相手にすらする価値ないよね?


勝手に人の書き込みを思い込みで「ryzenの時代=AMDがゲームでも勝つ」みたいに勘違いして脊椎反射で噛み付いたんだろうが
それこそアホ(淫厨)の極みだね
何度も言うが完全にブーメランで何を言われても理解できない子なんだなあ君
998アムドクラス 124.214.38.29
2017/09/12(火) 15:06:19.99ID:qh4uFSxq
現段階ではゲームでは7700k最強で安定
マルチではryzenが最強で安定
これにコーヒー(8700k)がどこまで食い込めるかって単純な話しなのにね

ゲームでは定格が低くかつ今のゲームは4コア最適化だから7700k相手だと厳しい
TBは一時的なものだしOCするにしてもそれは7700kでもできる事で元の定格高い分7700kが負担少なく有利
マルチではryzenにはまず勝てないだろう(アホの理論で4コア持ち出せば別だけどw)

ゲームで7700kを上回るために6コア(マルチコア)最適化をするというなら
それはryzenにも恩恵がある事で元々マルチで勝ってるryzenがますます使えるようになって行く
中途半端になりそうなコーヒーってどうなるんだろうね?って簡単な話に淫厨が発狂して噛み付いてきて大変だわ

>>855
逆に言うとマルチ用途ならryzen一択だけどな
そもそもゲーム用途で8700k一択にならずに7700kと二択になってる時点で
8700kって中途半端感あるってまだ気が付かない馬鹿?

ここにいる人はゲームメインで8700kが7700kといい勝負レベルだったら
7700k買って差額をグラボに使うぜ?ここにいる人は
マルチメインでほしいならryzen一択なんだしな
999アムドクラス 124.214.38.29
2017/09/12(火) 15:07:04.41ID:qh4uFSxq
>>862
出たw淫厨用語の「絶対性能」w
それxが出た時に散々聞いた気がするわwww

なるほど絶対性能持ち出さないとダメになったかw

>>867
淫厨が絶対性能持ち出すってのは
小学生が口喧嘩で言い返せなくなって涙目で何言われても「バーカバーカ」って連呼しだすようなもん
何言っても無駄よ?

>>884
>畑違いだから想像で適当に言ってるし、間違ってても気にしないけどな

俺が代わりに言ってやる
頭悪いなお前www
まぁ真性の馬鹿って自分が馬鹿って気がついてないって言うからな
多分周りから散々頭悪いって言われてても気づいてないだけだろうな
なにせ想像で適当に言って間違ってても気にしないレベルの頭だからなw

>>891
何かあれば絶対性能連呼しだすお前も同じようなもんだからな
馬鹿の一つ覚えってやつでな
それに気が付かないでそんなレス返してる時点で・・・・・・かわいそうに・・・・・・
1000アムドクラス
2017/09/12(火) 15:08:30.91ID:qh4uFSxq
句読点もそうだが
一つの書き込みでアンカー二つ入れてる書き込みもそうだよ
2chでアンカー二つ以上入れて書き込みするなんてよほどのかまってちゃんか荒らしか自演位だわ

アフィ男と馬鹿にする書き込みにだけ過剰なレス返してるし
もうバレバレなんだよね・・・・・・・・・

>>922
アフィ男乙
いい加減指摘どころかアフィ男批判の書き込みあると必ず沸いてくるだろ?お前w

自作とゲームと趣味の日々のブログは捏造と嘘しかないブログなんだともう周知されたからあきらめろ
あんなの見て参考にする情弱のジサカーなんてもういないからw
DELL男の主張聞いて「そうなのか!!6400スバラシイ!!」って言うような馬鹿はいないのと同じでな

>>929
4亀すら故障を心配すると書かざる終えないレベルの爆熱CPUについて
それを批判する書き込みしてる奴は荒らしとか
マジで信者脳だろお前
必死にインテル上げしてたアフィ男と同じメンタリティーだな

多くの誰もが評価するものを叩いてたなら荒らしだろうが
評価もされてないものを叩いてるやつも信者視点では荒らし認定とか
信者っておっそろしいもんだな・・・・・・
ニューススポーツなんでも実況



lud20251109152648ca

ID:3xtog1scのレス一覧:


903デフォルトの名無しさん
2015/04/29(水) 20:01:07.13ID:3xtog1sc
マネージクラスのポインタを取得(pin_ptr)し、ネイティブクラスのポインタにキャストする方法を探しています。

class NativeClass
{
 int Hoge;
};

[StructLayout(LayoutKind::Sequential)]
public ref class ManagedClass
{
private:
 int mHoge;

public:
 property Int32 Hoge { Int32 get() { return this->mHoge; } }
};

mHogeがinternalの場合は下記でできますが、privateの場合はどう書けば良いのでしょうか?

ManagedClass^ managedClass = gcnew ManagedClass();
pin_ptr<int> pManagedClass = &managedClass->mHoge;
NativeClass* pNativeClass = (NativeClass*)pManagedClass;
904デフォルトの名無しさん
2015/04/29(水) 23:24:10.23ID:wtD4uRPe
property const Int32% Hoge { const Int32% get() { return this->mHoge; } }
にすれば、&managedClass->Hoge が interior_ptr<const int> になるから後は適当にキャストすればいいんでは。
905デフォルトの名無しさん
2015/04/30(木) 23:38:42.52ID:EZeUEJ9k
>>904
返信ありがとうございます。
トラッキング参照のプロパティはC#側で扱えなくなってしまうので避けたいです。
フィールドを参照しないと無理みたいなので、mHogeを公開するようにしようと思います。
ありがとうございました。
906デフォルトの名無しさん
2015/05/01(金) 20:25:15.13ID:1uBqK3bl
知ってるかもだけど、ManagedClass が value class, value struct なら
pin_ptr<ManagedClass> を reinterpret_cast<NativeClass *> するのは安全だったはず…
907デフォルトの名無しさん
2015/05/08(金) 23:36:54.66ID:V8hi9yRP
MessageBoxを親の中央に表示する簡単な方法はないですか?
自分でフォームを作ってしまえばいいんでしょうか?
最近までVC++6.0でMFCしか触ったことない自宅へぼプログラマです
908デフォルトの名無しさん
2015/05/09(土) 21:01:16.72ID:sbTRo4x2
フックでメッセージボックスのハンドルを取得して移動するだけ
909デフォルトの名無しさん
2015/05/19(火) 18:58:05.23ID:bujHJjw6
.NET Framework 4 で C++/CLI 混在モード アセンブリを使用すると、スレッドの生成・終了時にメモリ リークが生じる問題について
http://blogs.msdn.com/b/jpvsblog/archive/2015/05/18/mixedassembly-thread-leak.aspx
910デフォルトの名無しさん
2015/05/20(水) 10:30:15.88ID:ugJdOWTQ
うちのPCだと4.5.2が入らないんだけども
くだすれC++/CLI(初心者用)part2YouTube動画>1本 ->画像>4枚
911デフォルトの名無しさん
2015/05/20(水) 22:52:40.74ID:2T6/P0Lm
>>910
そうそう、起動時なんか構成に失敗しましたとかでて毎回復帰がかかっている
912デフォルトの名無しさん
2015/05/20(水) 23:36:56.86ID:DchNMAYq
休日プログラマです。

環境:Visual Studio 2012 express
SQLサーバ:SQL Server 2012 express

ODBCドライバを用いて、フォームから検索ワードを取得し、
C++/CLIでのプリペアドステートメントを発行して結果を取得したいのですが、
それを用いたlikeなど部分検索SQLの結果取得でハマったまま先に進めません。

SQLCHAR search[255];
std string sql = "select hoge, strhoge from hogetbl where strhoge like \%?\%";
SQLPrepare(hstmt,
(SQLTCHAR *) sql.c_str(),
,SQL_NTS);
SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,sizeof(search),0,search,NULL);
SQLExecute(...

のように書いているのですが、プログラム上では何をやってもSQL_NO_DATAが返ります
あたりまえですがSQLそのものはServerのクエリで確認したところ通っています //?の所を'(任意文字列)'にした結果

また、SQL構文をLIKEの代わりにSQLのCHARINDEXを用い項目を増やして使ってみたのですが、同じようにダメでした。
// case when charindex(?,strhoge) > 0 then 1 else 0 end as searchflg ....
// where searchflg = 1 のように

ここには書き戻しできないのですが、escape句も試用したことがありますが、無理でした。
で、このLIKE以外は問題なく動きます。
また、他の機能はほとんどODBCで書いちゃったのでADOはやりたくないです。
何かいい方法ありませんでしょうか。よろしくお願いします。
913デフォルトの名無しさん
2015/05/20(水) 23:56:15.34ID:/RusctZx
普通 '%' + ? + '%' とか書くんじゃないの。
914912
2015/05/21(木) 00:02:48.74ID:6QiHBSDD
ああ、言い忘れていてすみません。
それもやりましたが、ダメでした
915デフォルトの名無しさん
2015/05/21(木) 00:43:36.74ID:vrFpc8wu
コマンドには like ? と書いて、パラメータに%を指定するのはどう?
916912
2015/05/22(金) 01:16:43.85ID:YmYYGDUM
うーん、それもやってみます。
あと、他の方はこうした事でハマったりは特にありませんでしたでしょうか。
書いてるのが一人でやってるのもあって、本当にプリペアドでの部分検索が可能かどうかが少し不安です
もちろん、突き詰めればなんでも可能なのでしょうけれども……
917デフォルトの名無しさん
2015/05/22(金) 02:49:24.89ID:O8zMbXMa
SQLTCHAR* 型に std::string のポインタ渡してるのは、問題ないの?
918912
2015/05/29(金) 21:54:54.52ID:ky+HtZPS
912です。>>917さんの意見も含め、別の観点からもみてみたところ
・・・非常にお恥ずかしいオチになったのですが、解決しました。

問題はコードではなく、BindParameter時のCHAR検索する箇所(SQL_CHAR)が
DB側でいつの間にかvarcharになっていたのが原因でした。合わせてやると簡単に使えるように…
みなさん、お騒がせして申し訳ありません。
919912
2015/05/29(金) 22:03:04.73ID:ky+HtZPS
>>918
×CHAR検索する箇所(SQL_CHAR)がDB側でいつの間にかvarcharになっていた
○CHAR検索(SQL_CHAR)としていたのに、対象のDB側の項目の型がvarcharになっていた
920デフォルトの名無しさん
2015/09/15(火) 21:43:10.94ID:sv5Bl9TI
質問です。

上手いことsscanfを.NETで実装する方法ってありますか?
ポインタが上手く渡せず困っています。

なお、正式に習ったわけではなく、見よう見まねでやっているため、
単純なところで勘違いがあるかもしれませんが、その時も指摘して頂けたら助かります。
921デフォルトの名無しさん
2015/09/15(火) 21:43:39.42ID:sv5Bl9TI
【これまでの経緯】
プログラムが間延びしてきたため、
これまで個別にちまちま書いていたファイル読み出し部分をsscanfで纏めて整理しようとしています。
ググッたところ、.NETにはsscanfそのものはなく、どうやら皆さん苦労しているようでした。
http://stackoverflow.com/questions/4223917/c-sharp-equivalent-of-c-sscanf
http://stackoverflow.com/questions/492262/is-there-an-equivalent-to-sscanf-in-net
http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-net
ただ自分の場合はcsvの読み出しで順番と対象だけ指定できればいいので、
以下のように組んでみました。(ただしまだ動かしていないので動かないかもしれません)

private: int sscanf_csv(String^ str, String^ format, array<void**>^ pointers){
array<String^>^ strs = str->Split(',');
array<String^>^ fmts = format->Split(',');
int i=0;
while (i<strs->Length && i<fmts->Length) {
if (fmts[i]=="int") {
if (!Int32::TryParse(strs[i],(int%)pointers[i])) break;
} else if (fmts[i]=="double") {
if (!Double::TryParse(strs[i],(double%)pointers[i])) break;
} else if (fmts[i]=="float") {
if (!Single::TryParse(strs[i],(float%)pointers[i])) break;
} else if (fmts[i]=="string") {
*(interior_ptr<String^>)pointers[i] = strs[i];
}
i++;
}
return i;
}

Stringのところは怪しいですが、intとdoubleとfloatはネイティブなら問題ないと思っています。
922デフォルトの名無しさん
2015/09/15(火) 21:44:06.10ID:sv5Bl9TI
【問題点】
・マネージドのクラスではメンバにネイティブ配列が使えないため、
書き込み対象にどうしてもマネージド配列の要素を指定することが必要となりますが、
interior_ptrをvoid**にキャストできません。
仕様上、interior_ptr → pin_ptr → int → void** にはキャストできる(っぽい)のですが、
 ・interior_ptrは配列に出来ない(array<interior_ptr<int>> も interior_ptr<int> hoge[] もエラー)
 ・pin_ptrも同様に配列に出来ない。さらにローカル変数として宣言しないと駄目っぽい。
ため、これらを回避するためにはベタにコードする必要があり、余計に見にくくなります。
・そもそも void** にしているのは可変長引数がいまいちだったからなのですが、
上記のように interior_ptr が配列に取れないから多分可変長も無理です。
・自分の場合は1行につきせいぜい10個程度の代入なので最悪べた書きでラップしてもいいのですが、
interior_ptr<Type>は型指定があり、型の順番は変更したいのでこれも厳しいです。

【出来ればいいなと思っている記述】
array<int> ary_int = gcnew array<int>(10);
array<double> ary_double = gcnew array<double>(10);
sscanf_csv(line0, "int,double", gcnew array<void**>(2){&ary_int[0], &ary_double[0]});
sscanf_csv(line1, "double,int", gcnew array<void**>(2){&ary_double[1], &ary_int[1]});

という感じです。良い案があればお願い致します。
923デフォルトの名無しさん
2015/09/16(水) 11:35:11.25ID:L4xvtXb4
>922
https://gist.github.com/anonymous/db1149cb0a1afbd1f6d8

書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
auto x = gcnew CSV(line1);
ary_int[0] = x->read_int(0);
ary_double[0] = x->read_double(1);
924デフォルトの名無しさん
2015/09/16(水) 21:00:32.05ID:sRYuFuHf
>>923
おお、ありがとうございます。
template<typename ... Ts>でTsはバラバラでもいけるんですね。知りませんでした。
あと、再帰で一つずつ剥がすのも思いついていませんでした。ググルと定番のようですがorz

> 書いてて思ったけど、変に凝るよりも↓みたいな奴の方が読む人にやさしい…
ちなみにその記述は今の状態です。
ただ、これだと抽象度が低いため記述量が増え、ちょっと保守性に問題を生じ始めています。
結局のところ、同じフォーマットの行を大量に処理して配列に突っ込むだけなので、
最終的には「ファイル名」「フォーマット」「対象配列」でよく、最上位からは(型情報ありなら)

parse_csv(filename, &ary0, &ary1, ...);

の1行にしたいのです。その下のファイル→行のところでコメント等をはがし、
delegateでparse_lineを呼ぶ算段でしたが、ポインタが渡せずに困っていました。
大変助かりました。ありがとうございました。


と思ったのですが、parameter pack はC++11の機能で、VS2013以降からのようです、、、
VS2015でそちらのコードが動作するのを確認しました。
自分が使っているのはVC++2008なので、この機会に移行を考えますorz
当面はせいぜい10個なのでunpackしたものを自分で書きますが、、、
925デフォルトの名無しさん
2015/09/16(水) 21:06:19.21ID:sRYuFuHf
すいません、やや話が前後しているので念のため一部訂正します。

元々 delegate から parse_line を呼ぶつもりでしたが、
最終的には可能なら parse_csv に纏めようとしています。
ただ parameter pack が使えないとやっぱキツいですね、、、
926デフォルトの名無しさん
2015/09/16(水) 22:14:50.26ID:L4xvtXb4
行によってフォーマットが違わない(ファイルによっては違うのかな)のなら、
行をパースした結果の型を定義しちゃったほうが保守性は上がると思うけど、縦方向の配列が必要なんだろうなぁ。
927デフォルトの名無しさん
2015/09/16(水) 22:41:51.71ID:sRYuFuHf
>>926
はい、ファイルによってフォーマットは違い、行では変わりません。
演算ソースを読み込むのに使うので、速度は遅くても構いません。

ただ一部、各行の先頭数値によって行のフォーマットを変えている部分があるため、
元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
ただこれはソースファイルが増えるのが面倒なので一部にパッチを当てたからであり、
きちんと修正すれば parse_file に一本化できるので、この方向で検討中です。

実は縦方向の配列は不要で、各行での構造体化も検討中です。
928デフォルトの名無しさん
2015/09/16(水) 22:55:17.14ID:sRYuFuHf
すいません、また細かいところで間違えました。一応念のため訂正しておきます。

× 元々はメンバ関数内で parse_file を呼び、フォーマット毎の parse_line を delegate で渡すつもりでした。
○ 元々は上位で parse_file を呼び、対象オブジェクトのメンバ関数を delegate で渡し、
 メンバ関数内で先頭数値を見てフォーマットを区別し、そこから parse_line を呼ぶつもりでした。(現時点で動作中)

今は上位で メンバ関数 Hoge.init(filename) を呼び、init内で全部済ませる方向です。

これまで全くオブジェクト指向をしておらず、それでも大して問題なかったのですが、
いい加減無理になってきたので、今更ながら粗結合化をやろうかというところです。
929デフォルトの名無しさん
2016/02/15(月) 00:11:59.92ID:BuMWAFI4
「System.Collections.Generic.List<T>型」を「LPARAM型」に変換する方法、
またその逆の変換をする方法、を教えて下さい。

List<T>型をLPARAM型に変換する必要があり、
その後で、List<T>型をLPARAM型から再取得する必要があるのです。
930デフォルトの名無しさん
2016/02/15(月) 01:15:53.23ID:Rn1JhND3
「その後で」がスコープを抜けた後を意味するなら、そのような方法はありません。
931デフォルトの名無しさん
2016/02/15(月) 07:40:32.53ID:7IG9/wk9
marshal_as を実装すればいいと思うよ。
LPARAM って実体は void** じゃなかったっけ
932デフォルトの名無しさん
2016/02/16(火) 07:41:35.26ID:uJkK1HCP
>>931
言語はC++ cli です。

msclr::interop::marshal_context mct;
LPARAM lParam = mct.marshal_as<LPARAM>(this->child_window_list);
↑で実装すると↓のコンパイルエラーとなります。
error C4996: 'msclr::interop::error_reporting_helper
<_To_Type,_From_Type>::marshal_as':
This conversion is not supported by the library or the header file needed for this conversion is not included. Please refer to the documentation on 'How to: Extend the Marshaling Library' for adding your own marshaling method.

またList<T>型をLPARAM型に再変換する方法が分かりません。
933デフォルトの名無しさん
2016/02/16(火) 09:54:31.98ID:jv0CDqht
経緯を見ずに
子ウィンドウリストの扱いとして妥当とは思えないが
934デフォルトの名無しさん
2016/02/16(火) 15:12:48.61ID:l0bB/6+q
LPARAMの使い道がEnumWindowsの第二引数とかだったらやりようがあるけど、そういうコードではない?
935デフォルトの名無しさん
2016/02/17(水) 07:42:51.53ID:6vFi9dMa
解決しました。
c++の世界で一時変数を設けて、ポインタを渡し、reinterpret_castで復元する、という方法です。
936デフォルトの名無しさん
2016/02/18(木) 02:54:21.18ID:/SXXA+KN
(たぶん解決してないなー、と皆が思ってる)
937デフォルトの名無しさん
2016/02/20(土) 19:06:01.50ID:HOPxSzsv
質問です。
+= で追加したフォームのイベント順を入れ替えたいのですが、やり方はありますか?

条件
1. デザイナは使いたい(既に大量に使っている)
2. 格好悪い書き方で全く問題ないが、全体的に書き直すのはNG

状況
numericUpDown->Changed 等に対してデザイナ上から再描画関数を割り当てています。(A)
(波形を表示する時のボリュームのような使い方です)
デザイナではフォームはデフォでは static でないため、
内部の別クラスからは numericUpDown->Value 等にはアクセスできません。
(自分でstaticと書いてコンパイルを通すことは出来ますが、デザイナで変更するたびに戻されます)
そこでイベントに別関数も割り当て、そこで内部 static struct に Value 等を書かせ、(B)
別クラスからはこの static struct を参照しています。

このとき、AとBの経路が完全に分離しているうちはよかったのですが、
統合していくうちにA内部から別クラスを呼ぶことが発生し、 static struct が未更新なのでバグっています。
イベントは追加順に呼ばれるようです。
デザイナで指定したイベント関数はフォーム生成時に指定される為、必ず A->B の順で呼ばれることになります。
これを B->A の順に入れ替えたいのですが、方法はありますか?
938デフォルトの名無しさん
2016/02/20(土) 19:06:30.87ID:HOPxSzsv
プログラムイメージ
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += 再描画関数; // (A)
someForm->Changed += struct更新関数; // (B)

static ref struct FormData {
Decimal someForm_value;
} formData;

function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
formDataを使う別クラスを使用 // formDataは未更新なのでバグる
}

やってみたこと
numericUpDown->Changed = Delegate::Combine(struct更新関数, 再描画関数); // 上書き再設定しようとしたが = は使えない
どうやら +=(add) と -=(remove) しかないので、(中身を参照できない)
一つずつ array<Delegate^> に吸い出して += で希望順にちまちま再設定も出来そうにありません。
全部の(A)の頭に(B)を追加してイベント経路を一本化すればいいのは分かりますが、
これは大量に書き換えが必要となります。
今現在(B)は後付で全てのフォームを列挙して追加しています。
この部分だけの変更に留められるのならそうしたいのです。
リフレクションも試しましたが、以下でeventInfoは取れますがその先に進めません。
System::Reflection::EventInfo^ eventInfo = (NumericUpDown::typeid)->GetEvent("ValueChanged");

以上、よろしくお願い致します。
939デフォルトの名無しさん
2016/02/21(日) 05:32:00.14ID:SNLM1Bng
> デザイナではフォームはデフォでは static でないため、
> 内部の別クラスからは numericUpDown->Value 等にはアクセスできません。

ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。

FormDataはstaticにせずForm1のメンバにして、その中身が変化したときのイベント
(ここに再描画関数を += して、EventArgsでパラメータを渡す)を足すのが良いのでは。
940デフォルトの名無しさん
2016/02/21(日) 12:45:43.68ID:Ur7lNYiz
>>939
回答ありがとうございます。

それでも解決しますが、それは全面改訂になります。
既に(B)を全ての(A)の頭に入れるという解決策はあり、それの方がデグレードの危険が少ないです。
ただ、リフレクション等で(B)と(A)の順を入れ替えられると、数行の変更で済み、デグレードは発生しません。
だからそれを探しています。

Form1と別クラスCを追加して再度説明します。
全てはForm1の内部クラスです。継承はしていません。
941デフォルトの名無しさん
2016/02/21(日) 12:46:15.32ID:Ur7lNYiz
【今】
ref class Form1{
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += 再描画関数; // (A)
someForm->Changed += struct更新関数; // (B)

static ref struct FormData {
Decimal someForm_value;
} formData;

function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
// struct更新関数() // (B)を += せずにここに入れれば解決する、ただし変更箇所多数
formDataを使う別クラスCを使用 // formDataは未更新なのでバグる
}
ref class 他のクラスC {
描画用データ作成 // ここで someForm->Value を使いたいが直接には出来ないので仕方なく static formData を確認
}
};

問題点:
クラスCから someForm->Value が取れないので static struct FormData で誤魔化す。
ただしこれだとイベント順が「描画(A)」→「データ更新(B)」となり、描画内容が1イベント分ずれる。
このため、(B)と(A)の処理順を入れ替えたいが、方法が見あたらない。
942デフォルトの名無しさん
2016/02/21(日) 12:46:44.50ID:Ur7lNYiz
>>939の提案】
ref class Form1{
Form^ someForm; // デザイナで作成したため、static ではない
someForm->Changed += struct更新関数; // (B)

ref struct FormData { // static ではない
Decimal someForm_value;
} formData;
formData->someForm_value->Changed += 再描画関数; // (A) // 自作クラスFormDataにChangedイベント追加

function struct更新関数(){ // (B)
formDataを更新
}
function 再描画関数(){ // (A)
formDataを使う別クラスCを使用 // formDataは常に更新済み、formDataを呼び出し時に渡す
}
ref class 他のクラスC {
描画用データ作成 // formData を参照
}
};

問題点:
イベント処理順は「データ更新」→「描画」と正しく固定される。
ただし全面改訂になる。
943デフォルトの名無しさん
2016/02/21(日) 12:47:27.88ID:Ur7lNYiz
> ここで結果と原因の理解が食い違ってるので設計が悪くなってるのでは。
結果: 描画に使われるデータが1イベント分ずれる
原因: イベント順が「描画」→「データ更新」だから
何か間違いはありますか?

データ構造としては本来は class Form1 : FormData となるべきため、
static で使うことも問題ないと思います。
既に記述されて動いているプログラムがあり、それを変更しようとしています。
データ更新→描画にプログラム上で固定するのはスクラッチからなら当然ですが、その場合にも結局
「どのデータが更新されたか→どの部分を再描画する必要があるか」を記述する必要があります。
この部分は今既にデザイナ上にあり、動いているので、それをそのまま利用する方法を探しています。
944デフォルトの名無しさん
2016/02/21(日) 20:54:36.76ID:SNLM1Bng
結果:アクセスできない
×原因:staticじゃないから
○原因:設計が悪いから

http://www.c-sharpcorner.com/uploadfile/b81385/how-to-change-order-of-event-handlers-execution-at-run-time/

リファクタ無理だというならここにあるC#のコードをC++/CLIに移植すればよいのでは。
945デフォルトの名無しさん
2016/02/22(月) 00:23:23.86ID:GxEKSJ9o
リンク先のコードでイベント順を入れ替えることが出来ました。
ありがとうございました。

プログラム構造については色々意見はあるとは思いますが、
最初から固まっている仕様に対して一度作って終わりなら誰も苦労しませんよ。
複数有る解決策のうち、今現在見える範囲での最適解をその都度選んでいくしかありません。

A. イベント順を入れ替えても
B. 各イベントハンドラの頭にデータ更新を挿入しても
C. 他クラスに対していちいちForm1オブジェクトを渡してstaticではなくしても

制御フローは同じです。(切り出し面が異なるだけ)
今後FormDataクラスや「他のクラスC」はForm1外でも使う可能性があるのと、
デグレードに対するデバッグの困難さを考えて、今回はAを選んでいるだけです。

まあいずれにしても、解決しました。
ありがとうございました。

なおリンク先、最後に小言が書いてありますが、完全に同意ですよ。
本来はイベントテーブルを参照できるメソッドが有ればいいだけです。
946デフォルトの名無しさん
2016/02/23(火) 04:03:35.79ID:zeSeypn1
本来はまともな設計をすればいいだけだよ
+= した順番に呼ばれるのもたまたまそういう実装になってるだけでしょ
947デフォルトの名無しさん
2016/02/29(月) 00:09:05.42ID:MKA4zt/L
イベントの実行順はaddされた順だと仕様化されてる
948デフォルトの名無しさん
2016/04/25(月) 16:38:42.40ID:FkG7uZgr
質問失礼します。

'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' を読み込みました。Cannot find or open the PDB file
'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' をアンロード

このアンロードはどうやって止めるのでしょうか?

実行した際に、dll内のメソッドを参照できないようで、以下のエラーとなります。
ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン
ブリ 'hoge.dll'、またはその依存関係の 1 つが読み込めませんでした。
指定されたモジュールが見つかりません。
場所 hoge.hogeclass..ctor()
場所 main(Int32 argc, SByte** argv)
場所 _mainCRTStartup()
コンパイルはできています。

よろしくお願いします。

(なんか急にできなくなった気がします。前は、問題無だったはずなのになぁ)

追記

他にも、以下のような、謎のメッセージも出ています。

'abc.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'abc.exe': 'ImageAtBase0x10000000' をアンロード

よろしくおねがいします。
949デフォルトの名無しさん
2016/04/26(火) 04:22:33.77ID:GzSuYmQg
「cannot find or open the pdb file c++」で検索!
950デフォルトの名無しさん
2016/04/26(火) 10:52:45.55ID:wKiIgsat
アンロードは気にするな
dllの場所をあちこちコピーして試してみ
951948
2016/04/27(水) 15:26:32.30ID:pZs1yVgK
思い出しました。

ildasm,ilasmをつかって、その該当のdllのPCBを作りました。
(dllの中まで、デバッガで追いかけるためです)
あたらしくコンパイルしたDLLへ、前のPCBがなかったものから、リンクを張り替えました。

そしたらエラーが出るようになった気がします。
(あくまで、気がするだけです。なんら、確かな関連はわかりません)

しかし、現在は、以前のオリジナルのDLLをリンクしています。
その状態でエラーが出ています。

>>950
回答ありがとうございます。

/LIBPATH の場所
exeと同じフォルダ
program filesフォルダのvisualSTUDIOフォルダ

それらに置き直しました。が、駄目でした。
952デフォルトの名無しさん
2016/04/27(水) 16:32:56.37ID:P7l59W4J
xyz.dllが依存している何かのDLLが見つからないんじゃないの
dependency walkerとかcygwinのlddとかで確認してみたら
953デフォルトの名無しさん
2016/04/27(水) 17:53:59.20ID:VZ0i7jHG
参照設定に入れてるんじゃないの?
一旦外して参照設定しなおしてみては
954948
2016/04/27(水) 18:59:04.66ID:1t3mn4AU
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\newxyz.exe' を読み込みました。シンボルが読み込まれました。
'newxyz.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
-----------------------------------------省略
'newxyz.exe': 'C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Culture.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
'newxyz.exe': 'C:\WINDOWS\assembly\NativeImages_v4.0.30319_32\mscorlib\cece9d0256e18427b64587ba690605d4\mscorlib.ni.dll' を読み込みました。シンボル ファイルにネイティブ シンボルがありません。
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll が読み込まれました。シンボルが読み込まれました。
ー---------------省略
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll が読み込まれました。シンボルが読み込まれました。
'newxyz.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'newxyz.exe': 'ImageAtBase0x10000000' をアンロード
'newxyz.exe' (マネージ (v4.0.30319)): 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\xyz.dll' が読み込まれました
'newxyz.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'newxyz.exe': 'ImageAtBase0x10000000' をアンロード
----------------続きがあります
----------------続きがあります
955948
2016/04/27(水) 19:01:17.20ID:1t3mn4AU
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\netClient.dll' を読み込みました。Cannot find or open the PDB file
'newxyz.exe': 'C:\Documents and Settings\company\My Documents\Visual Studio 2010\Projects\newxyz\Debug\netClient.dll' をアンロード
newxyz.exe の 0x7c812aeb (kernel32.dll) で初回の例外が発生しました: Microsoft C++ の例外: EEFileLoadException (メモリの場所 0x0012d0e8)。
----------省略
'System.IO.FileNotFoundException' の初回例外が newxyz.exe で発生しました。
'newxyz.exe': 'C:\WINDOWS\system32\version.dll' を読み込みました。シンボルは読み込まれました (ソース情報は取り除かれました)。
'System.IO.FileNotFoundException' のハンドルされていない例外が newxyz.exe で発生しました。

追加情報: ファイルまたはアセンブリ 'netClient.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたモジュールが見つかりません。

'newxyz.exe' (マネージ (v4.0.30319)): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました
スレッド 'メイン スレッド' (0xe48) はコード 0 (0x0) で終了しました。
スレッド 'Thread::intermediateThreadProc' (0xec8) はコード 0 (0x0) で終了しました。
スレッド 'HelperCanary::ThreadProc' (0xec4) はコード 0 (0x0) で終了しました。
プログラム '[3652] newxyz.exe: ネイティブ' はコード 0 (0x0) で終了しました。
プログラム '[3652] newxyz.exe: マネージ (v4.0.30319)' はコード 0 (0x0) で終了しました。
956948
2016/04/27(水) 19:13:09.09ID:1t3mn4AU
>>952
>>953
みなさん、ありがとうございます。

952さんのおっしゃる方法でいけました。

dependency walkerで、不足していたDLLが発見できました。

VSで、もし不足DLLがあるなら、教えてくれるはずだ」という、
思い込みが駄目でした。

3日*5時間=15時間

ぐぐたり、最インストして、時間をつぶしました。

(エラーコードを貼り付けたけど、無駄になっちゃた)
957デフォルトの名無しさん
2016/05/01(日) 16:47:47.97ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
1w
958デフォルトの名無しさん
2016/10/22(土) 11:55:32.76ID:ksoZ+Sju
大分人が居ないみたいだけど、質問させてください

archlinux(x86_64)+gtkmm3(3.22.0)+epoxy(1.3.1)+glsl上のOpenGLで隠面消去をしたいのですが
glEnable(GL_DEPTH_TEST)しても上手く行きません。fragment shaderの部分で書くのでしょうか?
もしサンプルなど有りましたらURLを教えて頂ければ幸いです。

OpenGL、GLSL周りの情報は何処を見て何処を出せば良いのか分からず不明ですが宜しくお願いします

少し問題の発端を・・・
以前はgtkmm3+glewで某ホームページで点にテクスチャを貼って大きさを変える方法を利用してました
(1) gtkのアップデート → context周りが上手く機能せず
(2) GLAreaクラス使用する → オプションとか無効なものが発生、描画命令が上手く動かない
(3) GLSLを使うようにする → アルファテストは何とか解決、隠面消去が実装方法が分からず
※オンボード(core i7 4771)のグラフィックを使っているせいかGLSLのバージョンも1.3以上にできないみたいです
959デフォルトの名無しさん
2016/10/22(土) 12:52:21.05ID:O48rD9qT
おおいたじん
960デフォルトの名無しさん
2016/10/23(日) 21:52:15.85ID:15UOA6Kp
わかったぁぁぁぁ!!!

glEnable( GL_DEPTH_TEST );
ではなく
set_has_depth_buffer();
でデプスバッファを有効にするみたいだ
こんな所まで変える必要はないだろうに・・・
961デフォルトの名無しさん
2016/10/23(日) 23:42:58.00ID:dKDci2rB
すれ違いな事を分かれよw
962デフォルトの名無しさん
2016/10/24(月) 00:49:08.07ID:B3VSjKub
いや誘導されてきたしw
普通のくだすれ落ちてるし
スレ立てるまでもないスレの方が良かったのかな?
963デフォルトの名無しさん
2016/10/24(月) 08:15:21.68ID:q3Pt9cuW
「くだすれ行け」って言われてこのスレに誘導されたと思ったんなら頭悪すぎるわ。
964デフォルトの名無しさん
2016/10/24(月) 10:37:31.81ID:9xygNeDa
>>963
ほんそれ
965デフォルトの名無しさん
2016/10/24(月) 12:49:59.59ID:e0+jKQlJ
まあ /CLI の文字はわからない人には見えないからな
966デフォルトの名無しさん
2016/10/24(月) 15:51:40.64ID:9xygNeDa
くだすれC++だったとしてもスレ違い
967デフォルトの名無しさん
2016/11/03(木) 11:44:11.90ID:s4829peE
C#で言うオブジェクト初期化子に相当する機能ってC++/CLIに用意されているんですかね?

getアクセッサしかないプロパティをコンストラクト時に初期化して使うようになっている
ライブラリがあったんですけど、もしかしてそういうクラスはC++/CLIから使えない?
968デフォルトの名無しさん
2016/11/03(木) 16:15:49.29ID:997Gjnyn
{ hoge : 774, fuga : 37564 } { .hoge = 774, .fuga = 37564 } みたいなやつ?
俺も2015で以前に探したけど見つからなかったな

どうなんだろうね、あるのかな
969デフォルトの名無しさん
2016/11/03(木) 16:49:50.16ID:s4829peE
それです。
VBには追加されているみたいだけど、C++/CLIは見捨てられているなぁ。
970デフォルトの名無しさん
2016/11/03(木) 17:54:07.51ID:997Gjnyn
VSの作りからして、それはないんじゃないかな
MFCでリボンじゃない方のドッキングのプロジェクト作るとわかるけど、
あれがものの見事にVSのドッキングだからね
かつデザイナは当然ユーザが生成する(した)フォームは(特にユーザコンポーネント)
.NETでビルドされたものをデザインタイム用に直接呼び出してる
(デザイナでエラーが出るだのインテリセンスが良く落ちるだの言ってるのは
VSの作りを”なんとなく”ですら理解できてない証拠)

MSとしてはVSで次のVSを作ったりする為にもC++/CLI作りこみたいけど
非常に言語体系が複雑かつ莫大な工数が必要で追いついてないんじゃないかなと妄想
既に市場のソフトウェアの価格破壊はとっくに完了
後はストアかUbuntuOnLinuxでサーバ市場か開発シェアで食い込むしかなさそうだし
971デフォルトの名無しさん
2016/11/08(火) 19:00:23.92ID:poFN3OHs
亀レスだが何となく妄想が閃いた

MS主導とはいえ、C++/CLIってなんかの国際的な規格みたいなので規定された
れっきとした規格だからおいそれと追加できないんだ
んで、C#もC++も構造体(クラス)の初期化子持ってるから昔みたいな適当に
「MS独自の拡張でーす」とかやっちまうと収拾つかなくなりそう

とはいえ { 0, ,1 2 } は後からメンバ追加したとき修正忘れとかトラブルの元だし
構造体宣言→ZeroMemory→b=1; c=2;はエイリアス切らないとconst修飾できねーし
(エイリアスはヒューマンエラーの元、constじゃないと最適化掛からないケースあり)
さっさと対応して欲しいとこではある
972デフォルトの名無しさん
2016/11/08(火) 22:29:24.78ID:ygc/1hMy
混在アセンブリが作れるのはC++/CLIだけだし非常にもったいないと思うんだが、
MS自身も既にグルー用途以外での新規採用を推奨してなかったんじゃないかな。
もうちょっと力入れてくれてたらMFCなんか捨てられたのに。
973デフォルトの名無しさん
2016/11/08(火) 22:58:35.07ID:poFN3OHs
https://support.microsoft.com/ja-jp/kb/3001686
これかな

そのわりにはVSには使ってんだよな
MFCしながらマネージコードをデザインタイムで呼び出してフォーム表示しなきゃならんから
仕方ないのかも知れんけど
974デフォルトの名無しさん
2016/11/09(水) 11:18:35.06ID:YhV0EIhT
さりげなくVS2015でMFC進化してたし、MFCのダイアログでスプリッタとか
(無理やり空のCFrameWnd貼り付けるとタブ移動できない)
ステータスバーとか(.NETみたいにツールバーもどきとしても使える)
.NETでしか使えないコントロールが軒並みMFCにきてくれたりするだけでもいいんだけど
これから先C++/CLIのサポートどうなるんだろ
多少見てくれやUIが前時代的でもMFCの方が安定かなぁ
975デフォルトの名無しさん
2016/11/21(月) 13:25:25.73ID:YpzsObn3
MSはCLI推奨せずにC#やVB推奨してっけど、将来のOffice系何で作るんだろな
難読化してもその内ソースのオプティマイザ出てきてイタチごっこになりかねんし暫くはMFCかね
976デフォルトの名無しさん
2017/01/15(日) 21:23:48.23ID:rvU554U6
C++/WinRT なんてものまで出てきて、C++/CX も先が短そう
WTL の再来っぽくていい感じだけど
977デフォルトの名無しさん
2017/01/15(日) 22:42:58.04ID:NxAjVWZ/
どれか一本に絞ってくれんと安心して規模がでかいモノに使えんのだよな
978デフォルトの名無しさん
2017/01/16(月) 17:58:46.48ID:YH2Bx58z
うむ
979デフォルトの名無しさん
2017/01/26(木) 18:08:08.58ID:o7A7h/DB
コロコロ変えて無駄な需要を作り出すのもM$の仕事
980デフォルトの名無しさん
2017/01/30(月) 00:52:58.91ID:WdnkMvUJ
C++/WinRT をちょっと使ってみたけど、これいいね
標準C++で WinRT の COM 定義をインクルードして普通に使えるのはいい
癖さえつかめば、あとはWinRTのお作法だけってかんじだわ
981デフォルトの名無しさん
2017/01/31(火) 15:17:17.52ID:KYCEEpNK
une
982デフォルトの名無しさん
2017/02/01(水) 02:50:30.54ID:L9Dup9x5
UWPとか限定せずに、C++/CLIのまま突っ走って欲しかったんだがなぁ
983デフォルトの名無しさん
2017/04/28(金) 09:31:56.32ID:O7EFHLbG
フォームアプリ用のプロジェクトのテンプレどっか落ちて無い?
毎回手動で設定するの面倒臭い。
984デフォルトの名無しさん
2017/05/20(土) 14:40:24.30ID:EW+Ld+8h
アンマネージ側でvector<>に格納されたデータをマネージ側に返すには
gcnewで別にメモリ確保してコピーしてから返す方法になるんですか?
(一時的に倍メモリ使うのが気になります)
985デフォルトの名無しさん
2017/05/20(土) 15:14:59.81ID:elFKlvRa
俺はあまり詳しくないけど、「返す」ってのが普通は要らないと思う。
マネージドからアンマネージドは直叩き出来るし、普通はそうする気が。
切り替えのオーバーヘッドがーみたいな記述もどこかにあったけど、
俺がやっている限りでは無駄命令は出ずに直叩きしてた。

逆にアンマネージドからマネージドも一応は直叩き出来るけど、
pin_ptrにしなければいけないし、可変長は多分無理。
STL/CLRにもvectorはあるけど、こちらだとアンマネージド側のソース変更が必要になる。
(*を^に変更)
だから一番楽なのは上記の「マネージドからアンマネージドを直叩き」だと思う。

なおコピーするのならそりゃ一時的には倍メモリ使うしかないでしょ。
986デフォルトの名無しさん
2017/05/21(日) 00:02:49.54ID:B5VLs+I5
collection_adapterの出番だ!って思ったら逆方向だったでござる
987デフォルトの名無しさん
2017/08/11(金) 18:57:30.61ID:F7GkAIq5
visual c++ express edition
(2010)で、
numericUpDown1 に、小数を入力(DecimalPlaces は、 1)できるようにしています。

コードから、

float suu;
(numericUpDown1 -> Value) =
 (float)suu;

が、エラー出ます。

suu と、numericUpDown1 を、整数にしておけば、エラー出ません。

小数で、入力するには、どうすればよいのですか?

m(__)m
988デフォルトの名無しさん
2017/08/11(金) 22:49:03.05ID:zXcmyaa1
エラーメッセージに書いてあるだろ。
989デフォルトの名無しさん
2017/08/14(月) 12:55:13.92ID:xjAbC9qa
カッコとかキャストとかわけわからずにやってんのか
System::Decimalにキャストしてみて
990デフォルトの名無しさん
2017/08/16(水) 04:12:40.72ID:UcOsqcC8
Cスタイルキャストが許されるのは小学生まで
991デフォルトの名無しさん
2017/08/18(金) 19:41:28.19ID:UHl99sa0
C++ って初期値を0にするって仕様化されていたっけ?
992デフォルトの名無しさん
2017/08/18(金) 19:50:42.62ID:G07FViaN
int a {};とすれば0初期化される仕様だったような?
993デフォルトの名無しさん
2017/08/18(金) 21:19:51.90ID:UHl99sa0
2010 だと、0x は使えないんじゃ?

まぁ、MSDN のコードを見れば解決する話だけど
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.numericupdown.decimalplaces(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-2
994デフォルトの名無しさん
2017/08/19(土) 15:20:13.68ID:vQyZjPpv
>>991
++は0にするんじゃなかったかな
コンパイルオプションでも変えられそうだけど
995アムドクラス 124.214.38.29
2017/09/12(火) 15:04:42.24ID:qh4uFSxq
>>803
言葉遊びじゃなく君が人の書き込を妄想で勘違いしてドヤ顔で噛み付いてきた挙句論点の違う馬鹿な屁理屈こねたってのが現実だよね?
それで負け惜しみか知らんが「こ、言葉あそびしたいだけだな(震え声」って言われてもね?

違うというなら
「多コア最適化が進めば必然的にryzanにも恩恵がある」
っていう書き込みのどこが思い込みなのかはっきり言えばいいじゃない
論点ズラす馬鹿な屁理屈こねたり負け惜しみ言ってないでさ?

>>809
また屁理屈ですか?
差が埋まるとか埋まらないとかの言い訳はいいからさ?
恩恵あるんだよね?じゃあそれは思い込みじゃないよね?
なんで君は思い込みどうこうとか言い出して噛み付いてきたの?

>何を言われても理解できない子なんだなあ

完全にブーメランで君の額に刺さってるよね
それでもまだ苦しい言い訳や屁理屈や負け惜しみ書き込むの?真性?
996アムドクラス 110.132.254.159
2017/09/12(火) 15:05:18.98ID:qh4uFSxq
それはお前の思い込みだ!!って思い込みで叩く
まさにアスペの症状そのままです
そして大概アスペ本人は自分が間違ってると認識すらないから
自分の非を認められず延々に論点ズラしや屁理屈こねてだから相手が間違ってると言い続ける
こういうのは相手にしないのが吉

>8700Kで走らせれば確実に2コア余るわけで[

おいおい
ゲームは今4コアメインだからって6コアCPUを使ったら2コア余るなんて馬鹿な事ほざく奴が
なんで自作板にいるんだ?まじで?釣りじゃなく本気で言ってんの?
本気なら真性じゃん
997アムドクラス 110.132.254.159
2017/09/12(火) 15:05:41.96ID:qh4uFSxq
>>815
>そうだねそれと同時にryzenの時代になっていくって事だよね
                ↓
>多コア最適化が進めば必然的にryzanにも恩恵があるという

これのどこに矛盾があるの?
「マルチ最適化が進めば必然的にryzenに恩恵がある=ryzen(もっと分かりやすくいえばマルチコア)の時代になっていく」
何の矛盾もないし言い換えですらない言ってる本質は同じなんだから
それを言葉遊びって自分が理解できない馬鹿ってだけだろ?

現時点でマルチ処理では7700Kより明らかにryzenは上で6コアの8700kだってまず勝てないだろうね
馬鹿がなぜか持ちだした4コアなら勝てるかもだけどさ
7700Kと比較するのに同価格帯じゃなく4コアryzen持ちだして何したいの?
つかそこまで論点拡大しなきゃ言い訳すらできない時点で馬鹿丸出しで相手にすらする価値ないよね?


勝手に人の書き込みを思い込みで「ryzenの時代=AMDがゲームでも勝つ」みたいに勘違いして脊椎反射で噛み付いたんだろうが
それこそアホ(淫厨)の極みだね
何度も言うが完全にブーメランで何を言われても理解できない子なんだなあ君

レス:1-200 201-400 401-600 601-800 801-1000 ALL

このスレへの固定リンク: http://5chb.net/r/tech/1268613679/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「くだすれC++/CLI(初心者用)part2YouTube動画>1本 ->画像>4枚 」を見た人も見ています:
くだすれC++Builder(超初心者用)その5
ラブライブ!初心者にもおすすめのキャラといえば?
福祉の相談援助職(初心者)に相談するスレ
くだすれDelphi(超初心者用)その57
くだすれDelphi(超初心者用)その59【Embarcadero】
【まず1嫁】くだすれPython(超初心者用) その58
くだすれPython(超初心者用) その52【まず1嫁】
くだすれPython(超初心者用) その50【まず1嫁】
くだすれPython(超初心者用) その33
くだすれPython(超初心者用) その51【まず1嫁】
【まず1嫁】くだすれPython(超初心者用) その54
くだすれPython(超初心者用) その47【Ruby禁止】
くだすれPython(超初心者用) その38
くだすれDelphi(超初心者用)その56
くだすれDelphi(超初心者用)その58【Embarcadero】
くだすれjavascript(超ウルトラ初心者用) その1
くだすれPython(超初心者用) その40
くだすれPython(超初心者用) その37
くだすれPython(超初心者用) その39
くだすれDelphi(超初心者用)その60【Embarcadero】
くだすれPython(超初心者用) その42【Ruby禁止】
くだすれDelphi(超初心者用)その54
くだすれPython(超初心者用) その32
くだすれPython(超初心者用) その48【まず1嫁】
Livedoorブログ初心者です
◆六本木で初心者でも行きやすいクラブは?◆
私、初心者であります。
初心者が独り言を言いつつ愚痴るすれ
デジタルで漫画とかイラスト描きたい初心者です
初心者がボウリングについて質問するスレ25
【超ド】130切りを目指すスレ part5【初心者】
【Part5】まったりと将棋するスレ【初心者歓迎】
FX初心者が少額でスキャルのトレードするスレ★77
初心者なんだけど、おすすめ教えてください
英語初心者から上級者まで集まって英会話するスレ
【Part4】まったりと将棋するスレ【初心者歓迎】
ひとり暮らし初心者なんやがガス代高すぎじゃね?
[初心者大歓迎] 将棋ウォーズ3級を育成するスレ
【DOD】に関するスレ。初心者です。お助けを…
インラインスケート初心者の漏れを育成するスレPART1
アニメ初心者ですオススメアニメ教えてくれ
初心者が出会えるおすすめ出会い系サイトまとめ 8
初心者です。ドイツ兵フィギュアについて…
絵描き初心者にアドバイスするの難しくね?
【初心者ok】構成と見積りを厳しく評価するスレ153
【初心者歓迎】PGAツアースイングで上達するスレ1
初心者なので3路盤から始めようと思います
FX初心者が少額でスキャルのトレードするスレ★74
FX初心者が少額でスキャルのトレードするスレ★75
【初心者ok】構成と見積りを厳しく評価するスレ169
FX初心者が少額でスキャルのトレードをするスレ27
PC初心者なんだが知恵をお借りしたいです
洋楽初心者ですが馬鹿にされてる洋楽教えてください
アニメ初心者ワイにおすすめのアニメを教えるスレ
初心者です!相談乗ってもらえませんか!
【初心者ok】構成と見積りを厳しく評価するスレ159
邪馬台国はどこにあったか初心者に説明するスレ3
【Part2】まったりと将棋するスレ【初心者歓迎】
【初心者です。教えて頂ければ幸いですm(_ _)m】
【Part3】まったりと将棋するスレ【初心者歓迎】
【スノボ】何からすればいいの?【初心者】
【Part7】まったりと将棋するスレ【初心者歓迎】
グラブル初心者で聞きたい事があります。
【Part8】まったりと将棋するスレ【初心者歓迎】
天文・気象板 初心者質問すれ。PART XXXXIV
【初心者チン】懸垂10回を目指すスレ13【非ワッチョイ】
08:06:09 up 17 days, 23:28, 4 users, load average: 12.39, 13.74, 13.84

in 0.05321192741394 sec @[email protected] on 110922