くだすれC++/CLI(初心者用)part2

■ このスレッドは過去ログ倉庫に格納されています
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
2012/11/23(金) 09:55:41.06
共産主義の理想はOSSのみが実現できる
2012/11/23(金) 09:57:46.75
OSSと共産主義が関連あるのは本当?FSFじゃなくて?
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 できるか教えてほしい。
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ちゃんねる ニュース板+で

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

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

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

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

欠けている関数またはデータが既に定義されているオブジェクト ファイルあるいはライブラリを取り込みます。
2012/11/26(月) 22:01:25.29
C++でのオブザーバーパターンの実装例を教えていただけますでしょうか
色々検索したのですが見つかりませんでした
2012/11/26(月) 22:05:15.44
C++/CLIならそんなもん要らん。言語に組み込まれている。
イベントを使え。
2012/11/26(月) 22:10:44.54
オブザーバーパターンの実装が分からんとか
さすがにC++/CLIを使う資格がないと言わざるを得ない
C#かC++からやれ
2012/11/26(月) 22:35:48.50
obsecureですね
わかります
632デフォルトの名無しさん
垢版 |
2012/11/28(水) 21:17:29.45
C++/CLIみたいな方言をやる意味あるのか?
2012/11/28(水) 22:48:53.31
しがらみってもんがあってな
2012/11/28(水) 23:56:16.87
2012で..netのウィンドウがある普通のアプリが
作れなくなったのだったか?
2012/11/28(水) 23:58:00.13
プロジェクトテンプレートが無くなっただけで、WinFormsの項目テンプレートはある
MSとしてはフェードアウトさせたいんだろうな
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ヶ月間も書き込みがないってどういうことなの。あっ…(察し
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に対してどのような演算を行えばよいでしょうか。
2013/01/27(日) 15:40:23.86
>>638
ビット演算でANDする。
2013/01/27(日) 17:35:27.93
>636
typedefという便利な機能があってのう…(しかし名前空間が汚染される)
2013/01/27(日) 17:58:33.08
マクロの出番だよ、マクロの出番
2013/01/28(月) 15:00:14.29
C++、C#どっちもできて、C++でGUIを簡単に作りたいっていうのには向いてるよね
SDKがC++でもC#どちらでも使えるし、守備範囲が広い
ただその為に変数の型変換とかちょっとめんどくさいこと調べないといけないけど
2013/01/31(木) 00:50:44.45
酷い釣りだ…C++に見えてその実全く違う言語じゃねぇか。
2013/01/31(木) 07:09:42.74
顧客が本当に望んでいたもの: デスクトップ向けC++/CX
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を見て勉強しているんですが
「グローバルに下記を設定しておく。」の範囲ってどこからどこまででしょうか?
2013/02/20(水) 15:11:06.36
htm じゃないか
2013/02/20(水) 15:15:14.41
>>647
あ、すいませんhtmでした
//homepage3.nifty.com/ishidate/vcpp10_g8/vcpp10_g8.htmです
2013/02/20(水) 15:26:26.90
staticなんだし適当にやってみりゃよかろう
WIDTHとHEIGHTはどこでもいいしarray部分はclass Form1に入れたら
とりあえず動いたぞ、面白いなこれw
2013/02/20(水) 15:33:46.31
何の役に立つのかな
2013/02/20(水) 15:34:48.07
>>649
自分やると動かないんですけど・・・
何で動かないんだ?
2013/02/20(水) 15:38:18.30
エスパー希望ですねわかります
2013/02/20(水) 15:54:18.59
うまくいかないのは実行時なのかコンパイル時なのか
うまくいかないと判断したのはどこ?
2013/02/20(水) 17:02:18.31
初心者なので…すいません
実行するとエラー100いくつとかはくんですよね
範囲設定間違ってるのか、何が原因なのかわかんないです。。。
2013/02/20(水) 17:07:17.35
100いくつって数かよ
もしそうならコンパイル時だろうし
全角スペース入ったままなんだろ
置換で半角に変えとけ
2013/02/20(水) 17:26:40.56
全角→半角やってもダメみたいです…
もし成功した方いたらそのプロジェクトファイルうpしていただけませんか?
どなたかお願いしますううう
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へ更新検討中
2013/04/17(水) 22:02:56.86
そういうのは可視化ツール使えよ
ParaViewとか
2013/04/17(水) 22:10:53.92
Gnuplotでも使えば一瞬
自分でそういうの書くのは手段が目的化してるバカ
2013/04/17(水) 23:21:24.73
マルチ
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のアトリビュート文を書けば良いんですけど
クラスはどうしたら良いんでしょうか。
どなたかこうすれば良いという方法があればご教示ください。
2013/06/01(土) 09:35:33.80
文章にイラン部分が多すぎ。人生相談の板は別にあるぞ
質問は的確に
664662
垢版 |
2013/06/01(土) 10:22:22.81
>>663
そやね、確かに質問がまとまってなかったは。
要は、普通にC++でクラスを作ります(例えばTestっていうクラス)。
それをC#内で使おうと思っても、無理になります。
で、その仲介役としてCLIを使うとします。
その時にCLIで作ったマネージドなクラス内でTestクラスのインスタンスを生成するには
どうしたら良いですか。という質問です。
2013/06/01(土) 11:56:57.18
>>664
C++のクラスをCOMコンポーネントにする
これで直接C#内で使えるだろ
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なんでね
2013/06/01(土) 12:22:18.97
>>667
ぼろいPCならアプリ終了しても暫くプロセス残ってるなんて普通にあると思うが
2013/06/01(土) 14:37:10.11
COMの場合それとは違って寿命管理の話だな
2013/06/01(土) 14:39:16.16
>>664
C++/CLIのマネージドクラス内でインスタンスを生成して
「フィールドに保持したい」ということでいいのか

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

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

ひとまず、EndRecieveの引数にIPEndPoint仕掛けてやればいいっぽ。
そしたらStringで判定できる。
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
うん、後者でやることにしたんだわ
2013/06/18(火) 15:44:15.55
リロード忘れたの意味がわからない人か
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};
みたいな、配列サイズを指定しない初期化方法は無いでしょうか。
2013/07/03(水) NY:AN:NY.AN
()書かない
2013/07/03(水) NY:AN:NY.AN
本当だ!!<>のあとに{}を書くっていう発想がなかったです。
ありがとうございました。
2013/07/15(月) NY:AN:NY.AN
C++/CLIで使えるロギングライブラリってどういうのがあるんでしょう?
.netで用意されているのか、あるいはlog4cppなんかのC++用の
ライブラリを使ったりしているんでしょうか。
2013/07/15(月) NY:AN:NY.AN
log4netとか
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さわりはじめたんだけどわからん・・・
2013/07/17(水) NY:AN:NY.AN
リテラルの文字列は文脈によってString^として扱えるってだけ
char*やwchar_t*とString^は別物
char*からならgcnew Stringしたりとか
2013/07/18(木) NY:AN:NY.AN
>>694
とんくす
2013/07/22(月) NY:AN:NY.AN
>>679
これ自分も試してるんだがうまくいかん。
EndReceivedの第二引数の中みても"255.255.255.255"で見分けがつかない。

後でコード載せますん。
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;
}
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);
}
2013/07/22(月) NY:AN:NY.AN
以下、簡単に説明。

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

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

なにかヒントでもありましたらご教示くださいませ。
2013/07/22(月) NY:AN:NY.AN
EndReceiveの第二引数かいてないのはいろいろ試してそれでもだめだったんで
一回もと(というか、チャレンジする前)に戻したためです。ご了承くだ。
2013/07/22(月) NY:AN:NY.AN
なんでEndReceive二回よんでんの?
2013/07/22(月) NY:AN:NY.AN
そう!すいませんアホなことしてましたアンド紛らわしい変数名つけてたんで違うほうみてた…
お騒がせしますた!
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のアドレスを指定できないとか言われて八方塞なんだけどどうしたらええの・・・
2013/07/24(水) NY:AN:NY.AN
いっそ、CreateThread
2013/07/24(水) NY:AN:NY.AN
_biginthread ってなんで必要なんだ?
CreateThread で十分用がたりるのだが?
というか cygwin/gcc-3 なんでこれしか選択肢がない
2013/07/25(木) NY:AN:NY.AN
_beginthreadも結局は内部でCreateThreadを呼び出しているのではあるが
そのほかにランタイムが使う内部変数の初期化なども行っている

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

逆に言えばMSVCRTを使わないのであればCreateThreadをつかえば良い
2013/07/25(木) NY:AN:NY.AN
テンプレ類は覚えること少なくする目的で簡単にしようという理念からはじまり、
いろいろ隠ぺいすることで逆にめんどくさいものになってるよね
2013/07/25(木) NY:AN:NY.AN
>>703
warning C4441無視してね?
2013/07/26(金) NY:AN:NY.AN
Managed Threadは使わんの?.NETなんだし
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 = "りんごごりららっぱ"となるようなインクリメントの方法はないでしょうか
2013/08/05(月) NY:AN:NY.AN
3行にわければ?

sehermitage.web.fc2.com/program/c_lang.html
> インクリメント演算子++とデクリメント演算子--は,変数の値を変化させるが,
> その変数が同じ式の中で再び参照された場合,動作は未定義となり値は保証されない
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のままで動かすにはどうしたら良いでしょう。
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です。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況