ふらっと C#,C♯,C#(初心者用) Part141

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/12/15(土) 10:46:07.45ID:Wu4Fx0bU
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
2019/11/25(月) 17:49:11.57ID:3yP/a9XY
>>251
すいません。
250はかなり要約して書いていて、本当はかなり長いコードでここには載せ難く。
10回に9回は1秒程度でループを抜け終了するので、
しばらく待ってれば表示されるかと思うと、やがてOSから応答してないよとメッセージがきます。

cならリソース開放忘れを疑うのですが、c#ってそのへん自動で管理してくれるんですよね。
253デフォルトの名無しさん
垢版 |
2019/11/25(月) 17:54:12.64ID:pjJuONFZ
自分のバグを言語やOSのせいにする香具師は何をやっても大成しない
2019/11/25(月) 18:05:07.13ID:b/ZUvETz
ウィンドウプロシージャから呼び出された時に時間のかかる処理をすると
基本的にマウス入力も含めた後続のウィンドウメッセージが処理できないので
結果的に操作などが受け付けなくなりフリーズしたようになる
(5秒だかウィンドウプロシージャから戻ってこないとOSが駄目だコイツと判断してよく見る「応答なし」になる)
レンダリング以外の部分で一秒もかかる可能性があるならその時点で別スレッドにすべきではある

フリーズに規則性がないのはそれこそロジック見てみないと誰にもわからんでしょ
様子からしてGCが暴れてる可能性はあるので値型使ってみたりとかの余地はあるだろうけど
2019/11/25(月) 19:04:16.55ID:qlQ2yr7c
魔法の言葉、Application.DoEvents();
ループ処理の中に書くといいよ
256デフォルトの名無しさん
垢版 |
2019/11/25(月) 19:27:30.58ID:0ThvbZYY
>>252
全体的に何を言ってるのかよく分からないんで推測だけど、
UIがフリーズするのはUIスレッド上のユーザーコードがビジーループになってるから。

ウィンドウやコントロールの再描画やマウスやキーイベントへの反応は
システム側のコードで処理されるわけだけど、それはUIスレッドで動く。

だからUIスレッド上のユーザーコードがビジーのままだと、
システムは側のコードも動けずにフリーズしたように見える
2019/11/25(月) 19:36:27.15ID:qmWi7Xp+
フリーズするのはスレッドを分離してないのが原因だけど
それ以前に何らかの条件で無限ループになっている可能性もあるな
2019/11/26(火) 03:03:00.47ID:oYeHIm2x
>>250
まずそういうのは実際には円を描かないで演算だけやってみるところからはじめませう。演算が悪いのか描画が悪いのか切り分けたい。
259デフォルトの名無しさん
垢版 |
2019/11/26(火) 10:03:15.82ID:c3SEnPpX
>>257
無限ループの可能性もあるが
こういう指数関数的に計算量増える場合は
UIと計算スレッドを分離するか
ループ途中でシステムコール呼んでイベント処理させるのが定石
2019/11/26(火) 10:19:16.34ID:SOHA2nuS
みなさんいろいろありがとうございます。
円の数とフリーズ確率に比例関係があるので、
ループでの処理が問題だと思います。

別スレッドにしてみようと思います。
それまで
Application.DoEvents();
活用してみます。
261デフォルトの名無しさん
垢版 |
2019/11/26(火) 14:22:57.27ID:dAEqoOXB
メモリ不足無視して実行し続けてるのも暴走って言うかもな
2019/11/26(火) 19:13:59.32ID:MuEAwLxr
>>250
乱数頼みなわけで物理的にいつまでも決まんねーことあんじゃん
重複が無い円はそのままにして置いたら?
どうせ乱数じゃん?
263デフォルトの名無しさん
垢版 |
2019/11/27(水) 12:24:02.31ID:KtqS+hCI
1に戻る前に強制GCした方が良くね
2019/11/30(土) 13:57:48.46ID:xRFcAUWE
2の終了判定が甘くて無限ループしてるだけだろ
2019/12/01(日) 12:57:13.04ID:i2YaNYYV
>>255
魔法の言葉、Application.DoEvents();
で解決しました。
やはりWhile分で条件達成まで延々ループ処理させてたのが問題だったようです。

フリーズすると制作したアプリで取得したデータ大丈夫なの?
って冷たい目にさらされていたのですが、これですっきりしました。

ありがとうございました。
2019/12/11(水) 19:12:23.65ID:t3xhIlyZ
ASP.NET MVCを初めて勉強しています
MVの場合、ボタンクリックのイベント処理はどう書くのがスタンダードなのでしょうか?
(Webフォームではイベントハンドラーを使ってましたが。)
2019/12/11(水) 19:20:12.37ID:qXq3MGtY
form
2019/12/11(水) 21:27:46.75ID:H3x5MOt+
>>266
チュートリアルからやりましょう
https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/first-mvc-app/
2020/01/01(水) 12:48:02.27ID:7beskV3u
自分で作ったアプリ14個くらいショートカットで起動できるようにしていて、
その中の名前が似た3つが弄ってもいないのにある日突然起動しなくなったのですがどういったことが考えられるでしょうか
2020/01/01(水) 12:53:24.15ID:2+A6XpAV
何かを弄ったから
2020/01/01(水) 13:19:14.52ID:ZjrgaAUK
妖精さんの悪戯じゃないかな
272デフォルトの名無しさん
垢版 |
2020/01/01(水) 13:26:47.06ID:tqBP4ADq
大きくならない
固くならない
2020/01/01(水) 13:51:29.41ID:dLiykUmV
>>271
妖精さん「俺のせいにするんじゃねーよ!」
>>269
C#のプログラム上の問題でないことは確か
PC初心者板へどうぞ
2020/01/01(水) 15:47:55.57ID:V7aDVAm9
とりあえずイベントログを見てなんかエラーが出てないか確認
2020/01/02(木) 09:17:19.87ID:OoAxt65V
テキストファイルを開いて書き換える動作が、
昨日まで普通にできていたのが今日やってみたら読み込みは出来るものの、書き込み時に
UnauthorizedAccessException:パスへのアクセスは拒否されました。
の例外が出て書き換えできなくなったのですがなぜでしょうか
2020/01/02(木) 09:36:21.31ID:4gUBqapQ
そのファイルのアクセス権を剥奪されたのでしょう
2020/01/02(木) 10:23:46.38ID:OoAxt65V
>>276
それは何故でしょうか?
自分のPCで自分以外は使う事もありません。
そしてどうすれば取り戻せるのでしょうか
2020/01/02(木) 10:24:50.25ID:ZgXvL7GY
>>275
WindowsUpdateで
「アレ、こいつこんなとこアクセスしてるけどヤバクネ?修正しとこ」
って改修したとこがまさに今反映された
一回だけそういうことあった
2020/01/02(木) 10:26:25.06ID:ZgXvL7GY
>>277
アプリ実行時に
右クリックメニューからの管理者で実行とかやってみれば?
それと対象のファイル自体のアクセス権も確認
2020/01/02(木) 10:47:12.88ID:OoAxt65V
ありがとうございます
WindowsDeffenderを切ってみたら書き込みが出来ました
セキュリティが悪く効いてた感じでしょうか
281デフォルトの名無しさん
垢版 |
2020/01/04(土) 15:40:54.17ID:wppxYzrl
DropDown式メニューの幅を指定したいのですが、ToolStripMenuItemだと、
幅を指定しても無視されてしまいます。
ToolStripButtonであれば反映されるのですが、ToolStripMenuItemでも指定する方法を教えてください。


//指定しても無視される(文字に合わせた幅になってしまう)
var item = new ToolStripMenuItem("テスト");
item.AutoSize = false;
item.Width = 100;
this.toolStripMenuItem.DropDownItems.Add(item);


//これなら反映される。
var item = new ToolStripButton("テスト");
item.AutoSize = false;
item.Width = 100;
this.toolStripMenuItem.DropDownItems.Add(item);
2020/01/04(土) 18:54:04.23ID:kH3pRzgo
>>281
ContextMenuStripでAutoSize=falseにしてそれをDropDownに登録するのはだめなのか?
283デフォルトの名無しさん
垢版 |
2020/01/04(土) 23:39:17.56ID:oOekXYXc
>>281
やってみた感じ、DropDownが表示される時に
MenuItemの場合はWidthではなくてTextを使って横幅を評価しているみたいなのでダメっぽいねw
(AutoSize = falseにした場合、MenuItemの幅自体はちゃんと設定した値になっていることは
マウスオーバーした時のハイライトの枠の大きさで確認できる)

Labelの場合はAutoSizeをfalseにすればWidthもHeightも設定した値が
そのまま表示に反映されるようなので、これをプレースホルダー的に使うことは出来そう。
バッドノウハウ感全開だけどw

でもMenuItemの幅をわざわざ制御したい理由が思いつかんw
284デフォルトの名無しさん
垢版 |
2020/02/11(火) 16:42:09.82ID:IKSpGnXe
C#でPDF生成するのに定番のライブライはどれ?
2020/02/11(火) 16:57:55.37ID:+cYPhDtF
skiasharpかのう
2020/02/11(火) 17:48:40.11ID:SM6OROcH
iTextSharp
2020/02/11(火) 18:32:47.01ID:3sdew+Rs
TextBoxに、テンプレート的なデフォルト文字列を持たせたいのですが、
Formのコンストラクタで
textBox1.Text = "文字列";
という方法で指定すると、TextBoxが表示されてから何も変更してない状態でもCtrl+Zで文字列が消えてしまいます。

どうすれば、消えないようにできるでしょうか?
2020/02/11(火) 18:49:44.84ID:zRIDVkEW
>>287
試してみたけどこちらでは.Net3.5でも.Net4.62でも再現しない
念のためフォームのShown時のCanUndoを見たらfalseになっているからUndoが効くはずがない
どこの違いなのか分からないが文字列設定後かShown時にとりあえずtextBox1.ClearUndo()を入れてみたら
289デフォルトの名無しさん
垢版 |
2020/02/11(火) 20:57:38.89ID:b7fKfEtL
>>287
試さずに適当なので違ってるかも

デザイナーでtextBox1のTextの値をリセット(コンテクストメニューにある)すれば
>>288の指摘どおりになるんじゃないの?

恐らくザイナーでTextの値をいじったことがあるために、InitializeComponentで
空文字が代入されてるんじゃないか。

でなきゃアプリケーション設定か
2020/02/11(火) 21:01:04.04ID:zRIDVkEW
キーボード眺めて思ったけどCTRL+ZでなくてCTRL+Xしている可能性もあるなw
手入力じゃなくコード上の代入だとUndoできないんだよな
291デフォルトの名無しさん
垢版 |
2020/02/12(水) 01:52:31.19ID:CB9IiDBv
実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
292デフォルトの名無しさん
垢版 |
2020/02/14(金) 11:15:02.38ID:a5iC3cHy
>>285-286
>>284 です
PDFsharp というのが良かったのでこれにしました
2020/02/14(金) 12:17:04.07ID:Rj5e84UH
>>292
それ日本語の折り返しに対応してないとか、難あるよ。
294デフォルトの名無しさん
垢版 |
2020/02/14(金) 12:38:43.18ID:a5iC3cHy
日本語は必須事項ではないので多分大丈夫です
295デフォルトの名無しさん
垢版 |
2020/02/14(金) 12:47:36.23ID:7R4aPKWb
PDF仮想プリンタの存在前提で普通にGDI+で書けば楽だと思うけどな
Win10ならデフォで入ってるんだし
296デフォルトの名無しさん
垢版 |
2020/02/14(金) 13:04:12.74ID:a5iC3cHy
なるほど!
検討してみます。ありがとう!
297デフォルトの名無しさん
垢版 |
2020/02/28(金) 18:11:07.35ID:HAMXUqwp
win32のhage.rcファイルからhage.resを造って-win32res:hage.resでexeにリンクしてるとき

hage.rcの中身が
hogehoge BITMAP "filename.bmp"
のときは
Bitmap a = Bitmap.FromResource(hInst, "hogehoge");
で取得出来るのですが

hage.rcの中身が
456 BITMAP "filename.bmp"
だと
Bitmap b = Bitmap.FromResource(hInst, 456);
Bitmap b = Bitmap.FromResource(hInst, Convert.ToString((IntPtr)456));
Bitmap b = Bitmap.FromResource(hInst, Convert.ToString((IntPtr)((UInt16)456)));
とかで取得出来ないのですが
456を上手くBitmap.FromResource()に渡す方法は無いのでしょうか?
2020/02/28(金) 18:48:54.41ID:snfNueOm
https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Bitmap.cs,8fd8c12a4ea73bbb
パブリックなのはないね
299デフォルトの名無しさん
垢版 |
2020/02/28(金) 19:02:19.22ID:HAMXUqwp
ありがとう
これだと自分でWin32APIのLoadBitmap呼んだ方が速い気がしないでもない
300デフォルトの名無しさん
垢版 |
2020/03/01(日) 05:48:57.42ID:wVHwYgLC
こっちは2018年かよ
雑談するには迷惑かからんでいいけど
301デフォルトの名無しさん
垢版 |
2020/03/01(日) 16:22:20.47ID:KSyofv5N
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr LoadBitmap(IntPtr hInst, IntPtr id);
[DllImport("gdi32.dll")]
private static extern bool DeleteObject(IntPtr handle);

IntPtr p = (IntPtr)((UInt16)id);
IntPtr hBitmap = LoadBitmap(hInst, p);
Bitmap b = (Bitmap)Image.FromHbitmap(hBitmap);
DeleteObject(hBitmap);
return b;
でうまくいきました
CharSet=CharSet.Auto を書かなくても動くのですが
書かない場合だと LoadBitmapW ではなく LoadBitmapA の方が使われるようで
id が数値リソースのときは問題出ないのですが string でリソース名を指定するときに
参照されなくなるので書いておく方が良さそうです
IntPtr p = Marshal.StringToHGlobalAuto(rn); // OK
IntPtr p = Marshal.StringToHGlobalUni(rn); // OK
IntPtr p = Marshal.StringToHGlobalAnsi(rn); // CharSet.Auto 書かないときはこっちを書くと動作
302デフォルトの名無しさん
垢版 |
2020/03/02(月) 10:28:32.19ID:NX3+Q9hq
C#というより.NET Framework全般の問題かもしれませんが・・・
ビルドした実行ファイルの拡張子を7zにして開けると
   .rsrc(フォルダ)
   .text
   .reloc
というファイルが出てきます

このうち「.text」をエディタで開けると

「C:\Users\ユーザー名\source\repos\プロジェクト名\obj\Release\実行ファイル名.pdb」

の文字列がそのまま入っておりユーザー名まで見えてしまいます

プロジェクトのプロパティなど見てみましたが該当する文字列は設定されていませんでした

この文字列が入らないようにビルドするにはどうすれば良いでしょうか?
303デフォルトの名無しさん
垢版 |
2020/03/02(月) 10:29:26.56ID:NX3+Q9hq
あ、本スレは別でしたかすみません
2020/03/02(月) 10:31:33.41ID:nPQHiUH/
>>302
C#の問題じゃなくVisual studioとかのビルド側の設定の話だから該当するスレでやれ
305デフォルトの名無しさん
垢版 |
2020/03/02(月) 11:10:23.06ID:glnmwhpK
hoge.Dispose()って必ず呼ぶ必要ありますか?
ネットにあるサンプルでDispose()してるのと放ったらかしなのとあるようですが
放ったらかしでも問題無いとしたらわざわざDispose()呼ぶのはなぜですか?
2020/03/02(月) 11:55:33.00ID:OjHPSko6
>>305
必ず呼ぶ必要はないが呼んだ方が良い

o リソース解放のタイミングやスレッドが制御できないのでそれらに依存する場合不具合の温床になる可能性
o 無駄なオブジェクトの昇格が起きてしまいGCに悪影響が出る可能性

いずれも無視できる場合もあれば致命的になる場合もある
サンプル程度で目くじら立てる必要はまったくないが
本番では呼んだ方が良い
307デフォルトの名無しさん
垢版 |
2020/03/02(月) 12:09:29.55ID:glnmwhpK
なるほどありがとうございます
ちなみに
using(Graphics g = Graphics.FromImage(hoge)){
...
}
みたいなときスコープ抜けるとgのDispose()は呼ばれないですか?
抜ける前に自分でg.Dispose();しておく必要ありますか?
2020/03/02(月) 12:27:47.69ID:MTJ6Jwm2
disposeを自動で呼んでもらうためにusing構文がある
2020/03/02(月) 15:08:50.50ID:rG8m8EdX
>>307
せめてこのあたりは一読してから質問した方がいい
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement
310デフォルトの名無しさん
垢版 |
2020/03/02(月) 15:54:23.45ID:glnmwhpK
解決しました
これでコードが随分スッキリしました
https://clickan.click/idisposable/
311デフォルトの名無しさん
垢版 |
2020/03/02(月) 16:35:38.68ID:glnmwhpK
何か今までGCに任せれば良いやって適当に書いてたんですが
意外とDispose()呼ばないといけない場所多いんですね
312デフォルトの名無しさん
垢版 |
2020/03/02(月) 16:37:42.01ID:glnmwhpK
クラスを書く時デストラクタとDisposeを省略するなっていうのが今回得た教訓かも知れません
2020/03/02(月) 17:18:06.30ID:8o+Bfjp3
ちゃんとした製品にするようなソフトならケアするけど個人やチームで使う程度のちょっとしたツールだったら一切書かないな
314デフォルトの名無しさん
垢版 |
2020/03/02(月) 17:24:53.84ID:qKOTAeuh
グラフィック周りや通信周り、データーベース周りあたりはちゃんと書いといた方がいいんじゃねえか?
315デフォルトの名無しさん
垢版 |
2020/03/02(月) 18:39:31.60ID:eX7+1wsX
稼げるブログの始め方をブロガーが解説!副業や不労所得を作る
https://www.youtube.com/watch?v=CHn6tNCYAZM
第1回 ブログをどうやって始めるのか?初心者の頃に知りたかったことをブロガーがわかりやすく解説【ブログで稼ぐ】
https://www.youtube.com/watch?v=TEMUZvQSM1Q&;t=708s
第2回 ブログで不労所得1億円!?ブログでお金を稼ぐ仕組みを解説〜
イケダハヤトさんはブログで年間1.5億円の収入!【ブログで稼ぐ】
https://www.youtube.com/watch?v=eWw-RfbNP1g
第3回【学生向け】ブログで月1万円を稼いでいる実例をわかりやすく紹介〜
ブログやアフィリエイト入門。【ブログで稼ぐ】
https://www.youtube.com/watch?v=mjHp2Fqj9OE&;t=190s
第5回 月100万円を稼げるようになった体験談!副業でブログを開始し不労所得に!【ブログで稼ぐ】
https://www.youtube.com/watch?v=nwrlcNSdw0U&;t=523s
サラリーマンをやりながらどうやって副業をやっていたのか?スケジュールや作業量などを解説
https://www.youtube.com/watch?v=FGlGur0XC_k
2020/03/02(月) 19:08:02.78ID:rG8m8EdX
>>311
メモリーはGCでいいけど>>314が言うような通信、データベースとかファイルとかリソース掴む奴はDispose呼ばないと他のプロセスが掴めなくなったりするから必要なくなったらDisposeしといた方がいい
2020/03/02(月) 19:16:23.68ID:dv6bLfIQ
そしてHttpClientで大量のTIME_WAITを抱えると
2020/03/02(月) 20:10:59.40ID:UF2yd5CT
デストラクタはへたに実装しないほうが良いかもしれんぞ
2020/03/02(月) 20:13:55.05ID:sj+3ONQ9
また要件の定まらないくだらない議論始めるのか?
2020/03/02(月) 20:18:10.66ID:mQ4CLNjj
>>307
Graphicsの実装次第だよ
usingで後始末がされるためにはされるように処理を作成する必要がある

みんなが作ってて広く普及してるクラスなら多分大丈夫だけど
今回のプロジェクトで作成したばっかのクラスはテストやるまで信用するな
321デフォルトの名無しさん
垢版 |
2020/03/02(月) 20:37:39.86ID:4FWK+c4C
既視感しか感じない質問だからどうせアレだろと思ったら本気の質問だったのかなw
2020/03/02(月) 22:53:10.49ID:ywWMC8is
>>320
> Graphicsの実装次第だよ
はあ?
g.Dispose()を呼ばない実装なんてできるのか?w

> usingで後始末がされるためにはされるように処理を作成する必要がある
それはまた別の話な
323デフォルトの名無しさん
垢版 |
2020/03/02(月) 23:49:32.46ID:4FWK+c4C
まあ可能不可能ならこういうことは可能だろうね
public class Graphics : IDisposable
{
  void IDisposable.Dispose()
  {
  }

  public void Disposable()
  {
    ...
  }
}
2020/03/03(火) 00:51:00.55ID:uFujH6tR
>>323
public class Graphics
{
  void Dispose()
  {
  }
}

( ゚д゚)・・・
2020/03/04(水) 09:15:28.58ID:TuAQ3w56
プログラミングそのものの話ではないんですが、c#で他の機械とソケット通信してデータやり取りしてこちらからの指示やその応答でなんらかの処理を行うプログラムはどう作るのが一般的なのでしょう?

通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。
通信相手はIOTのマイコンのようなもので独自のプロトコルがTCP/IP上で規定されています。

通信プログラムと業務用のアプリのデータのやり取りはファイルとしてデータを保存するのも手ではあるのですが、読み書き遅いので、共有メモリ的な使い方とかメッセージ的な使い方にならないかな、と。
linux上でc言語ばかり使っているので、どうするのが一般的なのかよく分かっておりません。

よろしくお願いします。
326デフォルトの名無しさん
垢版 |
2020/03/04(水) 09:44:00.83ID:hHbt2ovK
他の機械がWindowsならVNCサーバー入れるのが一番楽
2020/03/04(水) 09:51:06.45ID:TuAQ3w56
>>326
ありがとうございます
通信相手はIoTの小さなマイコンでOSはありません
2020/03/04(水) 09:51:13.72ID:VYRn8ATr
質問がごちゃっとしてるけど
要はローカルマシン内でプロセス間通信したいってこと?
今はgRPCが推されてるんじゃね 知らんけど
2020/03/04(水) 10:18:47.95ID:TuAQ3w56
>>328
わかりにくくてすいません
二つあって、ソケット通信するプログラムと業務用のプログラムを分けて作る場合の普通の作り方です

ソケット通信するプログラムは言語に付属してるライブラリをそのまんま使うしかないなと思ってます
プロトコルは規定されてるのでうまく作れないならcで作るしかないかな、と

業務用のアプリとソケット通信するプログラムのIPCはc#でどうやるのがWindowsの流儀なのか、お尋ねしております

ご教示いただいたgRPCは後者についての情報ですね
はじめて聞く技術なのでわかっておりませんが、参考とさせていただきます。少し道具立てが大きそうですね

ありがとうございます
330デフォルトの名無しさん
垢版 |
2020/03/04(水) 10:24:23.69ID:hHbt2ovK
>linux上でc言語ばかり使っているので、どうするのが一般的なのかよく分かっておりません。

「、」の前後で矛盾してるな
2020/03/04(水) 10:27:39.48ID:ITD9wOqz
普通にSocket使うけどな
2020/03/04(水) 10:36:36.26ID:TuAQ3w56
>>330
普段はlinuxでc言語ばかり使っています
Windowsでc#を使うことがなかったので、どういうものが普通とされているのか分かっておらず、戸惑っております
2020/03/04(水) 10:37:16.05ID:TuAQ3w56
>>331
IPC的なものは使わずにソケット通信すると言うことですか。なるほど。
2020/03/04(水) 10:51:26.57ID:VYRn8ATr
TCP/IP通信自体は.NETにもSystem.Net.Sockets.SocketやらSystem.Net.Sockets.TcpClientやら用意されてる
TCP/IP上で独自プロトコルならこの辺使うけどIPCでは普通直接は使わない
2020/03/04(水) 11:10:56.42ID:ITD9wOqz
>>334
いや325に独自プロトコルって書いてあったんでな
2020/03/04(水) 11:18:37.67ID:TuAQ3w56
>>334、335

わかりにくくてすみません
IoTデバイスとの通信はTPCIP上で独自のアプリケーションプロトコルが規定されてて、それに従います

それをやる通信用のプロセスと別建ての業務用のプロセスの間でもデータのやりとりを行う必要があるのですが、IPCはどうやって普通は実現してるのかがC#を使う上でわかっておりません
2020/03/04(水) 11:37:01.00ID:nNNW6i++
プロセス間通信って、共有メモリみたいな奴か?
2020/03/04(水) 11:58:57.18ID:TuAQ3w56
>>337
他にも組み合わせて使うと思いますが、その通りです。
2020/03/04(水) 12:31:07.29ID:TuAQ3w56
ど素人め、定番はこれだって回答がすぐにないのは
ひょっとすると、プロセスごとにわけて機能を作り込むような考え方はWindowsというかC#というかわからないですが、一般的ではないのでしょうか?
2020/03/04(水) 12:55:31.61ID:RbQqNGaU
触っちゃいけない人だったか
2020/03/04(水) 13:05:25.33ID:TuAQ3w56
>>340
私の書いた文はわかりにくいかもしれませんが、そのご指摘はどういう意味なのでしょうか?
342デフォルトの名無しさん
垢版 |
2020/03/04(水) 13:37:21.24ID:SkBOTqi1
>>341
自己紹介だと思っておけばいいよw
あなたは普通に質問してるだけだと思う。問題があるのは彼の方だろう。
2020/03/04(水) 13:43:31.55ID:pkFzTgEj
普通の方法があるんじゃなくて目的に応じて複数の方法があるという当たり前の話なだけなので
普通の普通の連呼されてもこんな方法もあるよって情報が増えるだけやぞ
既にもらった情報で自分の目的に合致するのか一旦実践した方がいいんじゃねえの

なんか最初のレス見る限りメモリマップトファイルとかウィンドウメッセージで事足りる話に見えるが
2020/03/04(水) 13:57:38.59ID:ITD9wOqz
元々のSocketはプロセス間通信用
SockAddr の AF_UNIXがそれ。
Windowsは長い間、AF_UNIXをサポート
していなかったが、去年ぐらいからwin10で使えるようになっている。(デスクトップとWSLの場合)

いつディスコン喰らうか判らない高位ライブラリーを使うか、
自分に技術蓄積がある(?)下位ライブラリーを使うかの判断はケースバイケースでしょぅね

幸運を
2020/03/04(水) 14:38:19.70ID:TuAQ3w56
>>342
なるほど

>>343
おっしゃることはよくわかります
抽象的でフワフワしてる質問であることも承知しております
その上で、デファクトスタンダードというかどこでもこんな方法よく使ってるよというご意見があればと。
手法についてご教示ありがとうございました

>>344
そうですね
一度使い始めると、それなりに長い寿命のソフトになってしまうので、悩ましいところです
簡単に捨てられるような技術だと
AF_UNIXかそれともINETでループバックで使うのもありですが、難しいですね

ありがとうございます
2020/03/04(水) 17:35:15.89ID:/myb4o4P
いろいろとアドバイスしてくれてる人たちに
ど素人め
と罵倒したのはなんだったの?
2020/03/04(水) 18:01:30.38ID:TuAQ3w56
>>346
ははは
そう解釈されましたか

識者「ど素人め、定番はこれだ」
私 なるほどー

という意味で書いたのですが、誤読を誘発してしまいましたね

私が他者へど素人めと言ってるわけではなく、識者ならこんなフワフワした質問は、パッと答えてくれるかなと思って書いたのです
2020/03/04(水) 18:01:58.08ID:VYRn8ATr
346
それは誤読
2020/03/04(水) 18:19:39.77ID:yiNVycVp
>>325
>通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。

プロセスとかプログラムを分けて作りたい理由って何なの?
書いてる内容だけだとライブラリ化すれば十分なように思えるけど
2020/03/04(水) 18:32:10.50ID:TuAQ3w56
>>349
機能が違うのが一番の理由です

設計するにあたって、通信の機能は独自のプロトコルがあるのでそれなりに考慮しなきゃいけないことが多くて、通信に専念させたいのですね

業務用のプロセスは、こちらはこちらでUIがありますので、通信を行う機能とは考察しなきゃいけないところが違います

また、両者の動作タイミングが全く違うこともありますね
351デフォルトの名無しさん
垢版 |
2020/03/04(水) 18:41:49.49ID:SkBOTqi1
機能が違うだけならプロジェクト分けてdll化すればよいだけなので、
普通に考えれば不特定多数(いやらしい言い方だけど)からのアクセスが要件なんでしょうたぶん

知らんけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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