!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
■Visual Studio 2022 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C#, C♯, C#相談室 Part98
1デフォルトの名無しさん (ワッチョイ 7f6a-B4f6)
2024/06/29(土) 19:18:41.95ID:NohAfdfx0258デフォルトの名無しさん (ワッチョイ 4a2b-bCeE)
2024/12/20(金) 13:01:10.12ID:9RxE8mFw0 はいそろそろC#の話題でよろ
259デフォルトの名無しさん (ワッチョイ eb78-RqoG)
2024/12/20(金) 15:29:33.49ID:raronLtC0 JAIST、「並行量子通信プロトコル」の完全な自動形式検証を実現
http://news.mynavi.jp/techplus/article/20241220-3090485/
http://news.mynavi.jp/techplus/article/20241220-3090485/
260デフォルトの名無しさん (ワッチョイ 3365-/DxF)
2024/12/20(金) 17:50:29.82ID:0SGDMmeR0 >>258
なんかある?
なんかある?
261デフォルトの名無しさん (ワッチョイ 6a79-qWVo)
2024/12/20(金) 20:02:54.65ID:7538eGNC0 またペンギンやら飛べない鳥だとかの話がしたいのかい?
それともPowshellの付属物の話がしたいのかい?
どっちなんだい?
それともPowshellの付属物の話がしたいのかい?
どっちなんだい?
262デフォルトの名無しさん (アウアウエー Sae2-N2kD)
2024/12/21(土) 10:56:38.14ID:bIHzWCsda >>257
>それによって「なぜ元々入っているのにわざわざ追加するのか」という当然の疑問を解消するコストが生じる。
>開発者の好みだけでサポート期間も互換性も劣るゲテモノをゴリ押しするのは極めて困難だし、
ほんそれ
5が全部入りにしておくのが正解だっただろうな
>それによって「なぜ元々入っているのにわざわざ追加するのか」という当然の疑問を解消するコストが生じる。
>開発者の好みだけでサポート期間も互換性も劣るゲテモノをゴリ押しするのは極めて困難だし、
ほんそれ
5が全部入りにしておくのが正解だっただろうな
263デフォルトの名無しさん (オイコラミネオ MM8f-Xxs2)
2024/12/21(土) 11:18:40.67ID:gj7hxYFQM PS for sysetmみたいなのを最小セットで入れておけば良かった
264デフォルトの名無しさん (ワッチョイ be10-Xxs2)
2024/12/21(土) 11:42:21.51ID:4NNdAFL10 終わらないPS談義
265デフォルトの名無しさん (ワッチョイ 8f5d-/DxF)
2024/12/21(土) 17:53:08.76ID:BdmznDtW0266デフォルトの名無しさん (ワッチョイ be10-Xxs2)
2024/12/21(土) 18:15:03.35ID:4NNdAFL10 いや知らんがw
俺がC#の話題にしろ言うたわけじゃないしw
俺がC#の話題にしろ言うたわけじゃないしw
267デフォルトの名無しさん (ワッチョイ 177d-N2O4)
2024/12/21(土) 21:57:55.88ID:i5j/m89y0 今関わってるプロジェクトがスペース2つでインデントしててちょっと面食らってしまったんだけどこれ珍しくないもの?
今まで携わってきた中で一件も遭遇したことなかった
今まで携わってきた中で一件も遭遇したことなかった
268デフォルトの名無しさん (ワッチョイ 6a6a-Pm71)
2024/12/21(土) 22:11:41.26ID:lUhayCnC0 過去に深いネストを大量生産する人がエラくなっちゃって、そういうルールになってしまったんじゃないかと妄想しちゃうなw
269デフォルトの名無しさん (ワッチョイ 8f5d-/DxF)
2024/12/21(土) 23:25:41.77ID:BdmznDtW0 今時スペース2個は珍しいな、C#とかではあんまりない気がする
昔々はどの言語でもタブを使っていいかとか、スペースで代用するなら2個か4個かで論争があったらしい
JSは2個が主流だった気がするけど今はどうだろ
昔々はどの言語でもタブを使っていいかとか、スペースで代用するなら2個か4個かで論争があったらしい
JSは2個が主流だった気がするけど今はどうだろ
270デフォルトの名無しさん (ワッチョイ a301-28Ti)
2024/12/21(土) 23:39:03.76ID:L6mtJxlH0 jsonは2だったり4だったりまちまちだけどね
271デフォルトの名無しさん (ワッチョイ 5f95-EHcm)
2024/12/22(日) 00:09:01.63ID:tw4BvM7X0 タブのが合理的
Goみたいな標準フォーマッタがあるのが理想だけどC#はそう言う文化はないね
Goみたいな標準フォーマッタがあるのが理想だけどC#はそう言う文化はないね
272デフォルトの名無しさん (ワッチョイ df79-0Q8V)
2024/12/22(日) 02:26:26.71ID:/fc7feyD0 俺はスペース2個のが視線移動減って楽だと感じてるからかなり昔から2個派だよ
>>268みたいな日本人特有の右倣えのお仕着せルールに甘んず昔から超効率化してるやつらは世の中に沢山いるんだよ
勉強になったな
>>268みたいな日本人特有の右倣えのお仕着せルールに甘んず昔から超効率化してるやつらは世の中に沢山いるんだよ
勉強になったな
273デフォルトの名無しさん (ワッチョイ 2b28-MhhP)
2024/12/22(日) 03:54:49.07ID:f4R4W69d0 TABに統一してるけど
表示上は半角スペース2から4個で用途で変えてる
表示上は半角スペース2から4個で用途で変えてる
274デフォルトの名無しさん (スププ Sd03-+INx)
2024/12/22(日) 05:02:43.67ID:SvMpALOcd {}は
if(){
}
の方が好き
普通は
if()
{
}
これ?
if(){
}
の方が好き
普通は
if()
{
}
これ?
275デフォルトの名無しさん (ワッチョイ 832b-8NiF)
2024/12/22(日) 05:44:22.67ID:96LlHbpn0 逆、最初の頃は上が大多数
ブログやら初心者講座やらで下の書き方が主流担ってきてる感じ
ブログやら初心者講座やらで下の書き方が主流担ってきてる感じ
276デフォルトの名無しさん (ワッチョイ b310-3P54)
2024/12/22(日) 06:21:31.74ID:I7bhR46i0 スペース2個インデントって言うと、XMLやHTMLを思い浮かべるな
277デフォルトの名無しさん (ワッチョイ 957c-Th9R)
2024/12/22(日) 07:48:19.66ID:dFQQq0VB0278デフォルトの名無しさん (ワッチョイ 957c-Th9R)
2024/12/22(日) 07:50:46.11ID:dFQQq0VB0279デフォルトの名無しさん (ワッチョイ 957c-Th9R)
2024/12/22(日) 07:53:26.28ID:dFQQq0VB0280デフォルトの名無しさん (ワッチョイ 832b-8NiF)
2024/12/22(日) 08:13:40.94ID:96LlHbpn0281デフォルトの名無しさん (ワッチョイ 832b-8NiF)
2024/12/22(日) 08:20:56.74ID:96LlHbpn0 当時、というか関数書くときって
hoge(){
…}
て書くのが一般的やったん
んでDelphiが出てきたらこの{}をBegin…Endで囲むから
hoge()
Begin
…
End
ここらへんはVBやVBAとかにも反映されて
その後C#で出した際にって感じかな
hoge(){
…}
て書くのが一般的やったん
んでDelphiが出てきたらこの{}をBegin…Endで囲むから
hoge()
Begin
…
End
ここらへんはVBやVBAとかにも反映されて
その後C#で出した際にって感じかな
282デフォルトの名無しさん (ワッチョイ 5f95-EHcm)
2024/12/22(日) 09:15:42.08ID:tw4BvM7X0 >>279
タブをインデントで使ってスペースをアライメントで使えば理論上ズレないよ
Goのフォーマッタはこれに従ってるからタブ幅は任意に設定できる
prettierみたいな途中で強制的に折り返すフォーマッタとは相性が悪いけど
タブをインデントで使ってスペースをアライメントで使えば理論上ズレないよ
Goのフォーマッタはこれに従ってるからタブ幅は任意に設定できる
prettierみたいな途中で強制的に折り返すフォーマッタとは相性が悪いけど
283デフォルトの名無しさん (ワッチョイ 5f95-EHcm)
2024/12/22(日) 09:22:40.24ID:tw4BvM7X0 Indent with tabs, align with spaces
https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces
これね
これが理想だけどエンジニアのレベルが高くないとこのルールを守るのは難しいからスペースにしてるのが大半
ただしGoは強制フォーマッタでこれを解決してる
個人プロジェクトなら最初から好きなタブ幅にすればいいからタブにするメリットもあまりないし
気分でタブ幅変えれるのは結構メリットあるけどね
https://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces
これね
これが理想だけどエンジニアのレベルが高くないとこのルールを守るのは難しいからスペースにしてるのが大半
ただしGoは強制フォーマッタでこれを解決してる
個人プロジェクトなら最初から好きなタブ幅にすればいいからタブにするメリットもあまりないし
気分でタブ幅変えれるのは結構メリットあるけどね
284デフォルトの名無しさん (ワッチョイ b310-3P54)
2024/12/22(日) 09:27:48.67ID:I7bhR46i0 俺はずっと>>274の前者でインデントはタブだなぁ
なおタブの幅はスペース4個分
なおタブの幅はスペース4個分
285デフォルトの名無しさん (ワッチョイ 7b8b-vY+B)
2024/12/22(日) 11:59:15.10ID:US35TJKc0 「自転車置き場の屋根の色」現象発生中
286デフォルトの名無しさん (スッップ Sdaf-3P54)
2024/12/22(日) 13:03:56.05ID:ci/BAnbad この手の話は職場のルールで決まるから個人がどうこうは関係ないよな
ただ自分のツールなんかは好きにしろだが
カッコ、演算子、型と変数の宣言の間の空白などもめる話題はいくらでもある
ただ自分のツールなんかは好きにしろだが
カッコ、演算子、型と変数の宣言の間の空白などもめる話題はいくらでもある
287デフォルトの名無しさん (ワッチョイ 195d-PrDn)
2024/12/22(日) 16:36:51.22ID:J7cuP3Nu0 >>285
「原子力発電所の建設」について議論したいなら付き合うよ、それで議題は?
「原子力発電所の建設」について議論したいなら付き合うよ、それで議題は?
288デフォルトの名無しさん (ワッチョイ 957c-Th9R)
2024/12/22(日) 17:09:33.96ID:dFQQq0VB0 まあreshaperでテーム共有設定使うだけだしな
289デフォルトの名無しさん (ワッチョイ 7b8b-vY+B)
2024/12/22(日) 19:48:07.14ID:US35TJKc0 >>287
では失礼して
Unity製ゲームのMOD開発なんかでリフレクション使いまくるのもなんかスマートじゃないから、
aelij氏のIgnoresAccessChecksToGeneratorを魔改造させてもらってフィールド含めて全パブリック&readonly解除でゲームのコードに全アクセス出来るようになってめっちゃ捗るようになったのだけど、
欲が出て標準ライブラリにも手を出したくなってやってみたらmscorlibなんかはReferenceAssemblyだからプライベートフィールドはそもそもdll内に含まれてないから書き換えられないんだよね。
ランタイム時の実体dllを決め打って渡せばstring.m_firstCharとかList<T>._sizeとかも全てアクセスできるようにはなるんだけど決め打ち渡しもスマートじゃないからどうにか自動で解決をしたい。
ILSpyやmono.cecilにはランタイム時の実体dllを特定するコードあるんだけどbuildアクションから同じ事するのって可能だろうか?
では失礼して
Unity製ゲームのMOD開発なんかでリフレクション使いまくるのもなんかスマートじゃないから、
aelij氏のIgnoresAccessChecksToGeneratorを魔改造させてもらってフィールド含めて全パブリック&readonly解除でゲームのコードに全アクセス出来るようになってめっちゃ捗るようになったのだけど、
欲が出て標準ライブラリにも手を出したくなってやってみたらmscorlibなんかはReferenceAssemblyだからプライベートフィールドはそもそもdll内に含まれてないから書き換えられないんだよね。
ランタイム時の実体dllを決め打って渡せばstring.m_firstCharとかList<T>._sizeとかも全てアクセスできるようにはなるんだけど決め打ち渡しもスマートじゃないからどうにか自動で解決をしたい。
ILSpyやmono.cecilにはランタイム時の実体dllを特定するコードあるんだけどbuildアクションから同じ事するのって可能だろうか?
290デフォルトの名無しさん (ワッチョイ e376-ZNoy)
2024/12/22(日) 19:55:36.15ID:zKZ5mRgv0 はい
291デフォルトの名無しさん (ワッチョイ 7b8b-vY+B)
2024/12/22(日) 20:10:00.61ID:US35TJKc0 へー
なんだかもうゲームよりMOD開発、MOD開発より開発環境開発の方が長くなっちゃってますわ
なんだかもうゲームよりMOD開発、MOD開発より開発環境開発の方が長くなっちゃってますわ
292デフォルトの名無しさん (ワッチョイ 832b-8NiF)
2024/12/22(日) 20:35:36.44ID:96LlHbpn0 だって、ここ
別にゲーム開発やないし
プログラムやで
別にゲーム開発やないし
プログラムやで
293デフォルトの名無しさん (ワントンキン MM33-MooF)
2024/12/22(日) 20:50:51.80ID:F7NwxYJ7M いまだにmonoで簡単にいじられまくりゲームあるのか
294デフォルトの名無しさん (ワッチョイ 0364-PrDn)
2024/12/23(月) 00:10:04.98ID:XKMn6iMr0 >>289
日本語がややこしいけど
①標準ライブラリのPrivate含む全フィールドにリフレクションを使わずにアクセスして書き換えたりしたい
んで、
②実体DLLを決め打ちで渡せばアクセスできるってところまでできてる
あとは
③実体DLL取得を自動化したい
④なおかつビルドプロセスに組み込みたい
ってことか
MOD開発とか知らんけど面白そうじゃん
日本語がややこしいけど
①標準ライブラリのPrivate含む全フィールドにリフレクションを使わずにアクセスして書き換えたりしたい
んで、
②実体DLLを決め打ちで渡せばアクセスできるってところまでできてる
あとは
③実体DLL取得を自動化したい
④なおかつビルドプロセスに組み込みたい
ってことか
MOD開発とか知らんけど面白そうじゃん
295デフォルトの名無しさん (ワッチョイ 0364-PrDn)
2024/12/23(月) 00:36:21.82ID:XKMn6iMr0 いまいち細かい要件がよくわからんけどAppDomain.CurrentDomain.GetAssemblies()で現在ロードされているすべてのアセンブリが取得できるらしいが、これ試した?
駄目だったならどういうところがダメだったのか教えてくれ
駄目だったならどういうところがダメだったのか教えてくれ
296デフォルトの名無しさん (ワッチョイ 7b8b-vY+B)
2024/12/23(月) 17:33:16.62ID:HWay8A+S0 >>295
要するにIgnoresAccessChecksToGeneratorの話でMSBuild内のコードとして動くものだからそれやってもMSBuildがロードしてるものが返されるだけとなる
ILSpyなんかもtypeof(object)などから解決してるので上記の理屈でそのまま移植はできない
要するにIgnoresAccessChecksToGeneratorの話でMSBuild内のコードとして動くものだからそれやってもMSBuildがロードしてるものが返されるだけとなる
ILSpyなんかもtypeof(object)などから解決してるので上記の理屈でそのまま移植はできない
297デフォルトの名無しさん (ワッチョイ 7b8b-vY+B)
2024/12/23(月) 17:42:25.10ID:HWay8A+S0 >>293
マルチメインじゃなくmodフレンドリーなゲームならil2cpp化せずそのまま出してるゲームも普通に多いよ
改変やチート防止のためなら難読化含めてやったところでそこまで難易度上がらないからそれ目的ならRustみたいにカーネルドライバ付けるしかない
マルチメインじゃなくmodフレンドリーなゲームならil2cpp化せずそのまま出してるゲームも普通に多いよ
改変やチート防止のためなら難読化含めてやったところでそこまで難易度上がらないからそれ目的ならRustみたいにカーネルドライバ付けるしかない
298デフォルトの名無しさん (ワッチョイ a374-PrDn)
2024/12/24(火) 18:58:01.04ID:9YLK2p020 個人開発の局所的な用途のマイナーツールの話が原発の建設並の重大事なのか
ちょっと難しすぎてわかんねえな
ちょっと難しすぎてわかんねえな
299デフォルトの名無しさん (ワッチョイ df79-0Q8V)
2024/12/24(火) 19:41:54.52ID:RgkKZ0Pj0 原発ってただの湯沸かし器じゃん
燃料がちょっとヤバイってだけで高尚なC#のプログラムと比較すんなよ
燃料がちょっとヤバイってだけで高尚なC#のプログラムと比較すんなよ
300デフォルトの名無しさん (スッップ Sdaf-3P54)
2024/12/25(水) 08:00:53.24ID:vP0zyznod C#だってただの道具
しかもC#だけじゃお湯も沸かせない
高尚とかちゃんちゃらおかしい
しかもC#だけじゃお湯も沸かせない
高尚とかちゃんちゃらおかしい
301デフォルトの名無しさん (ワッチョイ 57ef-FEgH)
2024/12/25(水) 08:26:32.01ID:ML8x6ihA0 ツールは手段であって目的はアクセシビリティバイパスだから言語レベルのスケールの話な
実際これ求めてる人は少なくないからUnsafeAccessorが実装された訳で
てかリフレクションの方が文字列で指定してる分よっぽど危険だと思うんだけどな
実際これ求めてる人は少なくないからUnsafeAccessorが実装された訳で
てかリフレクションの方が文字列で指定してる分よっぽど危険だと思うんだけどな
302デフォルトの名無しさん (ワッチョイ df79-0Q8V)
2024/12/25(水) 21:07:50.83ID:G9TljzDw0 エロがビデオを進化させてきようにチートがソフトウェアを進化させるんだよ
湯沸かししかできない原発野郎は難しいなら黙ってろ
湯沸かししかできない原発野郎は難しいなら黙ってろ
303デフォルトの名無しさん (ワッチョイ 5761-PrDn)
2024/12/25(水) 21:35:48.64ID:7oEpQVAc0 煽りたいだけのやつが居着いちゃってるのか、このスレ
304デフォルトの名無しさん (ワッチョイ b310-3P54)
2024/12/25(水) 21:39:40.34ID:WXVFxdaX0 いつものことだよあぼーんしときな
305デフォルトの名無しさん (ワッチョイ 832b-8NiF)
2024/12/25(水) 21:44:21.01ID:WWJbrOfz0 だぁ~から
ドーンおじはコテ付けろや
ドーンおじはコテ付けろや
306デフォルトの名無しさん (ワッチョイ 3ec0-m72+)
2025/01/01(水) 16:01:04.94ID:nGCOTvnw0 Enum.IsDefined(enumType, intValue)ってボックス化する?
AIに聞いたら最初は「ボックス化しない」とか言われたんだけど、第2引数がobject型として受け取ることを指摘したら「ボックス化するかもしれません」みたいな曖昧な返答されてよく分からなくなってきた
AIに聞いたら最初は「ボックス化しない」とか言われたんだけど、第2引数がobject型として受け取ることを指摘したら「ボックス化するかもしれません」みたいな曖昧な返答されてよく分からなくなってきた
307デフォルトの名無しさん (ワッチョイ 9a8b-tkBd)
2025/01/01(水) 16:03:34.19ID:zfs+VkVC0 object型ならするよ
.NETのバージョンにもよるけどgeneric版の方が型がコンパイル時解決されるからパフォーマンスは良い
.NETのバージョンにもよるけどgeneric版の方が型がコンパイル時解決されるからパフォーマンスは良い
308デフォルトの名無しさん (ワッチョイ 3ec0-m72+)
2025/01/01(水) 16:07:11.80ID:nGCOTvnw0 だよね ありがとう
309デフォルトの名無しさん (ワッチョイ 3ec0-m72+)
2025/01/01(水) 16:23:43.79ID:nGCOTvnw0 確かにジェネリクスでstruct制約付けたらボックス化回避できそう
ありがとう
public TEnum ConvertToEnum<TStruct, TEnum>(TStruct value)
where TStruct : struct
where TEnum : Enum
{
if (!Enum.IsDefined(typeof(TEnum), value))
throw new ArgumentException();
return Unsafe.As<TStruct, TEnum>(ref value);
}
ありがとう
public TEnum ConvertToEnum<TStruct, TEnum>(TStruct value)
where TStruct : struct
where TEnum : Enum
{
if (!Enum.IsDefined(typeof(TEnum), value))
throw new ArgumentException();
return Unsafe.As<TStruct, TEnum>(ref value);
}
310デフォルトの名無しさん (ワッチョイ 63eb-UqtM)
2025/01/01(水) 22:57:38.89ID:tBHA6FMH0 JetbrainsやILSpyでIL見てboxあるかどうかみればいいんじゃね
311デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/01/31(金) 11:32:40.83ID:jXb+sjQI0 ハック的なことなんだけどインスタンスのオブジェクトヘッダに埋め込まれるクラスハンドルへのポインタ?をインスタンス無しで得る方法って無いかな
typeof(MyClass)ってすると正にそのポインタが「mov rcx, 7FFB716DE758 -> call clrのtype取得関数」って感じのアセンブラが生成される訳だけど、その7FFB716DE758を得たいんだよね
インスタンスがあればUnsafeライブラリ用いて簡単に得られるのだけど
typeof(MyClass)ってすると正にそのポインタが「mov rcx, 7FFB716DE758 -> call clrのtype取得関数」って感じのアセンブラが生成される訳だけど、その7FFB716DE758を得たいんだよね
インスタンスがあればUnsafeライブラリ用いて簡単に得られるのだけど
312デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/01/31(金) 11:34:05.08ID:jXb+sjQI0 文章修正してたら日本語おかしくなったけどもし知ってる方いたらヒントでも何でも教えていただきたい
313デフォルトの名無しさん (ワッチョイ 9714-natb)
2025/01/31(金) 12:00:57.31ID:ejyfLYzx0 GetTypeで得られるものとは違うわけ?
314デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/01/31(金) 12:51:25.22ID:jXb+sjQI0 >>313
GetTypeやtypeofで得られるものはあくまでもType型のマネージドインスタンスだから全く違う
だけど逆アセをするとtypeof()時には即値でハンドルへのポインタ?がアセンブラコードとして埋め込まれてるので内部的にはめちゃくちゃ簡単に得る方法があるはずなんだよね
GetTypeやtypeofで得られるものはあくまでもType型のマネージドインスタンスだから全く違う
だけど逆アセをするとtypeof()時には即値でハンドルへのポインタ?がアセンブラコードとして埋め込まれてるので内部的にはめちゃくちゃ簡単に得る方法があるはずなんだよね
315デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/01/31(金) 14:52:24.28ID:jXb+sjQI0 一応自己解決だけどGetTypeやtypeofで得られたTypeインスタンスから「type.TypeHandle.Value」で希望のものは得られた
本来即値で得られるはずなのに冗長でもやもやはするが
本来即値で得られるはずなのに冗長でもやもやはするが
316デフォルトの名無しさん (ワッチョイ 1a9d-natb)
2025/01/31(金) 15:09:15.71ID:gpRv5mHv0 ChatGPTに聞いたら同じ答えが返ってきたけどRuntimeTypeHandle.Valueは環境によってメソッドテーブルへのポインタじゃなくEETypeへのポインタや実装依存のメタデータへのポインタになる場合もあるから自分で確認しろよとのこと
317デフォルトの名無しさん (ワッチョイ 4e10-EVp+)
2025/02/01(土) 06:49:44.36ID:LNgv56j/0 そらJITなんだから・・・
318デフォルトの名無しさん (ワッチョイ 1a9d-natb)
2025/02/01(土) 10:13:37.11ID:m26c//aC0 いやJITは関係ないぞ
319デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/02/01(土) 11:06:41.29ID:dQW8A9nv0 JITだろうが何だろうがconst intなんかは即値で埋め込まれるしね
だからクラス名.TypeHandleValueみたいなconst持っててくれたら嬉しいんだけど需要ほぼゼロすぎるか
だからクラス名.TypeHandleValueみたいなconst持っててくれたら嬉しいんだけど需要ほぼゼロすぎるか
320デフォルトの名無しさん (ワッチョイ 1a9d-natb)
2025/02/01(土) 12:12:47.05ID:m26c//aC0 ん?即値で得られない理由の話だったか
そっちならJIT関係あるわな
そっちならJIT関係あるわな
321デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/02/01(土) 12:17:46.65ID:dQW8A9nv0 いや関係ないよ
なぜなら逆アセすれば分かるけど思いっきりレジスタ長以下のconst同様の挙動を見せてるからね
typeof時にね
なぜなら逆アセすれば分かるけど思いっきりレジスタ長以下のconst同様の挙動を見せてるからね
typeof時にね
322デフォルトの名無しさん (ワッチョイ 17d7-EVp+)
2025/02/01(土) 12:48:59.04ID:MtSj47O+0 逆アセw
323デフォルトの名無しさん (ワッチョイ 4e10-EVp+)
2025/02/01(土) 12:53:04.51ID:LNgv56j/0 アドレスとかプロセス起動のたびに変わることは無いんだっけ?
324デフォルトの名無しさん (ワッチョイ 9a8b-IJXt)
2025/02/01(土) 12:59:03.20ID:dQW8A9nv0325デフォルトの名無しさん (ワッチョイ 4e10-EVp+)
2025/02/01(土) 13:11:42.17ID:LNgv56j/0 なら結局、ユーザークラスじゃ都度変わりうるってことじゃ?
326デフォルトの名無しさん (ワッチョイ a36b-natb)
2025/02/01(土) 15:14:32.83ID:XDtywhx90327デフォルトの名無しさん (ワッチョイ 3f79-sZTl)
2025/02/02(日) 01:00:15.78ID:U03i5Xdj0 ILの段階で定数になるなら決め撃ちで問題ないだろ
328デフォルトの名無しさん (ワッチョイ 7f10-cJwu)
2025/02/02(日) 06:57:31.12ID:VLFyjNJe0 ユーザークラスがILの段階で決め打ちになるわけないだろ
329デフォルトの名無しさん (ワッチョイ 3f8b-YkUZ)
2025/02/02(日) 10:55:04.54ID:NGhOMzti0 ユーザークラスだろうが何だろうが別に関係ないし
IL段階で定数になる必要もなくて事実として実行時に機械語になるタイミングで定数化されるんだよ
プログラマがその定数にアクセスする手段がないだけで
IL段階で定数になる必要もなくて事実として実行時に機械語になるタイミングで定数化されるんだよ
プログラマがその定数にアクセスする手段がないだけで
330デフォルトの名無しさん (ワッチョイ 0fd7-cJwu)
2025/02/02(日) 11:18:20.90ID:RNSPFW0b0 実行時にならんと決まらんものは定数じゃねぇ
331デフォルトの名無しさん (ワッチョイ 3f8b-YkUZ)
2025/02/02(日) 12:43:09.18ID:NGhOMzti0 定数ってか再三言ってるけど即値だな
332デフォルトの名無しさん (ベーイモ MM8f-VqRJ)
2025/02/03(月) 22:15:38.62ID:EtXs2rHFM インスタンスの型の厳密なチェック typeof (X) == x.GetType() やジェネリック型のチェック typeof (T) == typeof (X) はJITで最適化されるから、
質問者のケースがもしこれらに該当するなら変なハックは必要ない
質問者のケースがもしこれらに該当するなら変なハックは必要ない
333デフォルトの名無しさん (ワッチョイ 5f90-YkUp)
2025/04/14(月) 17:39:25.74ID:XKwEHxpo0 Task<T>を返す非同期メソッドをUIスレッドで呼び出して結果を取得したいのですがどうすればいいのでしょうか?
ConfigureAwait(false)の後やTask.Runでスレッドプール上?で実行されてる
コード内からメソッドをUIスレッドで呼んで結果を取得したいのです
ConfigureAwait(false)の後やTask.Runでスレッドプール上?で実行されてる
コード内からメソッドをUIスレッドで呼んで結果を取得したいのです
334デフォルトの名無しさん (ワッチョイ bfbc-6F/1)
2025/04/16(水) 05:53:28.46ID:HaWtxdw70 イマイチ質問が把握できないがこういうことか?
UIスレッドでTaskScheduler.FromCurrentSynchronizationContext();してTaskSchedulerを確保しておく
UIスレッドで実行したいメソッドは上記TaskSchedulerを使ってStartするTaskとして実行する
public Form1()
{
this.Button1.Click += ExecuteAsync;
}
async void ExecuteAsync(object? sender, EventArgs e)
{
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
await Task.Run(async () => {
using var logger = new Logger("Task");
var task = Task.Factory.StartNew<Task>(() => SetTextAsync(), CancellationToken.None, CreationOptions.None, scheduler);
await task;
await task.Result;
});
}
async Task SetTextAsync() {
await Task.Delay(1000);
this.Text = DateTime.Now.ToString("HH:mm:ss");
}
UIスレッドでTaskScheduler.FromCurrentSynchronizationContext();してTaskSchedulerを確保しておく
UIスレッドで実行したいメソッドは上記TaskSchedulerを使ってStartするTaskとして実行する
public Form1()
{
this.Button1.Click += ExecuteAsync;
}
async void ExecuteAsync(object? sender, EventArgs e)
{
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
await Task.Run(async () => {
using var logger = new Logger("Task");
var task = Task.Factory.StartNew<Task>(() => SetTextAsync(), CancellationToken.None, CreationOptions.None, scheduler);
await task;
await task.Result;
});
}
async Task SetTextAsync() {
await Task.Delay(1000);
this.Text = DateTime.Now.ToString("HH:mm:ss");
}
335デフォルトの名無しさん (ワッチョイ bfbc-6F/1)
2025/04/16(水) 05:58:12.67ID:HaWtxdw70 あ、TaskCreationOptionsのTaskが抜けてる…
async Task SetTextAsync()の代わりにasync Task<string> GetTextAsync()だったら
StartNew<Task<string>>にしてvar text = await task.Resultすればいい
async Task SetTextAsync()の代わりにasync Task<string> GetTextAsync()だったら
StartNew<Task<string>>にしてvar text = await task.Resultすればいい
336デフォルトの名無しさん (ワッチョイ 5f90-YkUp)
2025/04/16(水) 07:31:16.54ID:QZV5gxIh0 ああ、ありがとうごいます
それっぽいです
要はスレッドプールなどで実行されてるメソッドから
途中でダイアログなどを出してユーザのアクションの結果で更に処理を
進めるかキャンセルするかを決定したかったにです
同期コンテキストは調べたのですがこのPostなんたらじゃできないなと..
TaskSchedulerの方から攻めるのですね
ありがとうございます
それっぽいです
要はスレッドプールなどで実行されてるメソッドから
途中でダイアログなどを出してユーザのアクションの結果で更に処理を
進めるかキャンセルするかを決定したかったにです
同期コンテキストは調べたのですがこのPostなんたらじゃできないなと..
TaskSchedulerの方から攻めるのですね
ありがとうございます
337デフォルトの名無しさん (ワッチョイ 5f90-YkUp)
2025/04/16(水) 07:41:21.34ID:QZV5gxIh0 ボタンなど押して非同期メソッドを呼び出す
この時、非同期メソッドには介入が必要な時に呼び出される非同期コールバックを渡せるようにする
呼び出し側で、非同期コールバックとして
ダイアログなどをだしたりする
ダイアログの表示などはUIスレッド実行したかった
こんな感じでした
この時、非同期メソッドには介入が必要な時に呼び出される非同期コールバックを渡せるようにする
呼び出し側で、非同期コールバックとして
ダイアログなどをだしたりする
ダイアログの表示などはUIスレッド実行したかった
こんな感じでした
338デフォルトの名無しさん (ワッチョイ 27d7-kxmC)
2025/04/16(水) 15:31:47.59ID:yzNZC+ym0 BOOL TestFunc(DWORD dwType, LPBYTE pBuffer, LPDWORD pcbBufSize);
dwType:欲しいデータのタイプコード
pBuffer:要求したデータを入れるバッファへのポインタ
pcbBufSize:pBufferが指すバッファのサイズ
例えば↑のような関数をエクスポートしてるアンマネージDLLがあって
DllImportする時のプロトタイプ宣言ってどう書いたらいいんでしょ?
dwType:欲しいデータのタイプコード
pBuffer:要求したデータを入れるバッファへのポインタ
pcbBufSize:pBufferが指すバッファのサイズ
例えば↑のような関数をエクスポートしてるアンマネージDLLがあって
DllImportする時のプロトタイプ宣言ってどう書いたらいいんでしょ?
339デフォルトの名無しさん (ワッチョイ 27d7-kxmC)
2025/04/16(水) 15:33:52.84ID:yzNZC+ym0 LPDWORDはref uintでいいのかなと思うけど
LPBYTEとか、それこそLPVOIDだのハンドル系受け取る引数なんかはどう宣言したものかよく解らなくて
LPBYTEとか、それこそLPVOIDだのハンドル系受け取る引数なんかはどう宣言したものかよく解らなくて
340デフォルトの名無しさん (ワッチョイ bfbc-6F/1)
2025/04/16(水) 19:05:55.86ID:HaWtxdw70 典型的にはこう
bool TestFunc(uint dwType, byte[] pBuffer, out uint pcbBufSize);
ref/outで宣言すると使いやすいけどNULLを渡せなくなるってのが問題になったりすることもある
ケースバイケースなので一概には言えない
ポインタが絡むなら誰がメモリ確保して誰がどうやって解放するのかを把握してないといけない場合もある
bool TestFunc(uint dwType, byte[] pBuffer, out uint pcbBufSize);
ref/outで宣言すると使いやすいけどNULLを渡せなくなるってのが問題になったりすることもある
ケースバイケースなので一概には言えない
ポインタが絡むなら誰がメモリ確保して誰がどうやって解放するのかを把握してないといけない場合もある
341デフォルトの名無しさん (オイコラミネオ MM0b-z3tz)
2025/04/16(水) 19:58:01.06ID:VD2CYluqM 第三引数は普通はoutじゃないきがするけど
342デフォルトの名無しさん (ブーイモ MM8f-xKSY)
2025/04/16(水) 20:27:15.14ID:qW3EbLcWM outだと呼び出し元からバッファサイズを渡せないな
343デフォルトの名無しさん (ワッチョイ 7f10-z3tz)
2025/04/16(水) 20:47:35.76ID:JiAmFx7+0 refじゃあかんの?
344デフォルトの名無しさん (ワッチョイ 27d7-kxmC)
2025/04/16(水) 20:48:46.57ID:yzNZC+ym0345デフォルトの名無しさん (ワッチョイ ed96-VXNn)
2025/04/20(日) 10:42:31.48ID:T4EZ0xEH0 refとかout使うと機械語的にはゴミラッパーが生成される
ついでにboolも実はネイティブ型ではないので同様にゴミが生成される
多少可読性や安全性を犠牲にして良いなら
int TestFunc(uint dwType, byte* pBuffer, uint* pcbBufSize)とすればC/C++と遜色ない機械語になる
戻り値はintなので != 0としてbool判定をする手間がかかるけどね
ついでに.NETCore系統で且つ内部でIOなどを行わずに計算量が少なく割とすぐ戻る事が確定している場合は[DllImport("native.dll"), SuppressGCTransition]とすると尚良し
ついでにboolも実はネイティブ型ではないので同様にゴミが生成される
多少可読性や安全性を犠牲にして良いなら
int TestFunc(uint dwType, byte* pBuffer, uint* pcbBufSize)とすればC/C++と遜色ない機械語になる
戻り値はintなので != 0としてbool判定をする手間がかかるけどね
ついでに.NETCore系統で且つ内部でIOなどを行わずに計算量が少なく割とすぐ戻る事が確定している場合は[DllImport("native.dll"), SuppressGCTransition]とすると尚良し
346デフォルトの名無しさん (ワッチョイ ed96-VXNn)
2025/04/20(日) 10:47:34.35ID:T4EZ0xEH0 もしネイティブ側の戻り値がBOOLではなくboolならC#側はbyteにすればいい
boolって実は結構罠だからな
boolって実は結構罠だからな
347デフォルトの名無しさん (ワッチョイ 4954-EnZh)
2025/04/21(月) 11:37:03.90ID:ed9AfVbw0 CharGPTの回答
WinAPI型名 意味 C# 対応型 備考・使い方例
BYTE 8ビット符号なし整数 byte 0〜255
WORD 16ビット符号なし整数 ushort 0〜65535
DWORD 32ビット符号なし整数 uint よく使われる
LONG 32ビット符号付き整数 int 一部APIでは戻り値で使用
ULONG 32ビット符号なし整数 uint DWORDと同義扱いされることあり
BOOL 論理値(実際はint型) bool または int C#では [MarshalAs(UnmanagedType.Bool)] を使うと便利
LPSTR ANSI文字列へのポインタ string (MarshalAs(UnmanagedType.LPStr))
LPCWSTR Unicode文字列定数へのポインタ string (MarshalAs(UnmanagedType.LPWStr)) 通常はこれを使う
LPBYTE BYTEへのポインタ IntPtr / byte[] / byte* C#で配列やポインタとして使う
LPDWORD DWORDへのポインタ ref uint / out uint / IntPtr APIによって使い分け
HANDLE 汎用ハンドル IntPtr ハンドルは全部 IntPtr
PVOID/LPVOID 任意のポインタ IntPtr Voidポインタの表現
CHAR 1バイト文字 byte(ANSI)/ char(Unicode) ANSI文字列なら byte
TCHAR Unicode/ANSI切り替え可能文字型 char または string Unicode前提なら char/string
WinAPI型名 意味 C# 対応型 備考・使い方例
BYTE 8ビット符号なし整数 byte 0〜255
WORD 16ビット符号なし整数 ushort 0〜65535
DWORD 32ビット符号なし整数 uint よく使われる
LONG 32ビット符号付き整数 int 一部APIでは戻り値で使用
ULONG 32ビット符号なし整数 uint DWORDと同義扱いされることあり
BOOL 論理値(実際はint型) bool または int C#では [MarshalAs(UnmanagedType.Bool)] を使うと便利
LPSTR ANSI文字列へのポインタ string (MarshalAs(UnmanagedType.LPStr))
LPCWSTR Unicode文字列定数へのポインタ string (MarshalAs(UnmanagedType.LPWStr)) 通常はこれを使う
LPBYTE BYTEへのポインタ IntPtr / byte[] / byte* C#で配列やポインタとして使う
LPDWORD DWORDへのポインタ ref uint / out uint / IntPtr APIによって使い分け
HANDLE 汎用ハンドル IntPtr ハンドルは全部 IntPtr
PVOID/LPVOID 任意のポインタ IntPtr Voidポインタの表現
CHAR 1バイト文字 byte(ANSI)/ char(Unicode) ANSI文字列なら byte
TCHAR Unicode/ANSI切り替え可能文字型 char または string Unicode前提なら char/string
348デフォルトの名無しさん (ワッチョイ 6610-h0BB)
2025/04/21(月) 14:43:06.51ID:AUqiwuPT0 何のためのVOIDポインタかで変わるしIntPtrで良いもんでもないわ
まぁなんだ、CharGPTなんて言うアホは黙っとけw
まぁなんだ、CharGPTなんて言うアホは黙っとけw
349デフォルトの名無しさん (ワッチョイ a6ce-i6bQ)
2025/04/22(火) 19:34:21.37ID:rMo0RJWh0 Copilot「僕の出番ですね!」
350デフォルトの名無しさん (ワッチョイ 79d7-vVAN)
2025/04/23(水) 08:49:37.84ID:eLYGqJZZ0 去ね
351デフォルトの名無しさん (スフッ Sd0a-NF34)
2025/04/23(水) 12:17:26.63ID:snQ3Sxp8d wchar : 「神は我を見放したのか」
352デフォルトの名無しさん (オイコラミネオ MM71-h0BB)
2025/04/23(水) 20:01:13.83ID:WPvg2tW3M >>347
ChatGPTはc#弱いな
ChatGPTはc#弱いな
>>345
最近のC#はMIL(IL?)でなくマシン語を直接()生成するようになったのですか
最近のC#はMIL(IL?)でなくマシン語を直接()生成するようになったのですか
354デフォルトの名無しさん (ワッチョイ f978-fvra)
2025/04/24(木) 21:13:01.92ID:985jarF60 >>353
最近は native AOT といってそういうことができる
リフレクションが使えないなど制限もあるけど
元のレス先の345は、たぶん native AOT とか関係なく、中間言語が生成するコードも指して機械語と言ってると思う
最近は native AOT といってそういうことができる
リフレクションが使えないなど制限もあるけど
元のレス先の345は、たぶん native AOT とか関係なく、中間言語が生成するコードも指して機械語と言ってると思う
>>354
なるほど、ありがとうございました!!
なるほど、ありがとうございました!!
356デフォルトの名無しさん (ワッチョイ ed96-VXNn)
2025/04/25(金) 11:23:25.63ID:reKQm/Xa0 >>354
ILの話はしてない
nativeAOT及びJITが最終的に生成するアセンブラを指して言ってる
パフォーマンス目的でC/C++と連携しようとすると返ってパフォーマンス落ちる事も多いからな
機械生成のゴミラッパーが挟まると呼び出しコストがdll内部のルーチンより1万倍掛かるとかザラにあるし
ILの話はしてない
nativeAOT及びJITが最終的に生成するアセンブラを指して言ってる
パフォーマンス目的でC/C++と連携しようとすると返ってパフォーマンス落ちる事も多いからな
機械生成のゴミラッパーが挟まると呼び出しコストがdll内部のルーチンより1万倍掛かるとかザラにあるし
357デフォルトの名無しさん (ワッチョイ 79d7-vVAN)
2025/04/25(金) 12:53:18.17ID:RL99gkZ90 まぁ、アンマネージ呼び出しをパフォーマンス目的でやるもんじゃないしな
レスを投稿する
ニュース
- 「結局どこを走ればいいんですか?自転車は」 26年度から「青切符」導入 弁護士「自覚と認識を」★2 [七波羅探題★]
- 【速報】長期金利、一時1.850%に上昇 [蚤の市★]
- 【声優】ラブライブ声優・新田恵海(39)、事務所退所を発表 今後はフリーで活動「声優として歌手として、これからも邁進してまいります」 [Ailuropoda melanoleuca★]
- 【福井】注射器に入れた自分の体液を背後から女性の服に…27歳会社員の男を3度目の逮捕 [nita★]
- 「中国はメンヘラ」日本企業の本音は「もう生活を壊されるのはゴメンだよ」 ★2 [煮卵★]
- 植田日銀総裁「食品価格の上昇、長引く」「今の実質金利、極めて低い」 12月利上げは事実上「予告」か [お断り★]
- 高市首相、進撃の巨人のモノマネをする。安倍晋三 [545512288]
- ネトウヨ、「朝敵」を「朝鮮の敵」という意味と勘違いしてしまう [165981677]
- 【速報】日銀総裁、12月利上げを事実上「予告」ー日経報道 [115996789]
- 【速報】立花孝志ら3人を書類送検 [115996789]
- 「車のために働いてる」手取り15万円のシングルマザー、月に3.2万円が軽自動車の維持費へ消えていた。地方で移動貧困が深刻に [663766621]
- 高市内閣支持率75%。やっぱりケンモメンって、日本の人じゃない感じなの…? [673057929]
