[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/24 17:42 / Filesize : 263 KB / Number-of Response : 1022
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 19:00:56.93 ID:Y4203ffV0.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part131
mevius.5ch.net/test/read.cgi/tech/1504861931/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
mevius.5ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

710 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 00:25:17.81 ID:cFpPTw5nM.net]
>>693
番号に#とか使ってたり
アメリカみたいにアルファベット入れてたら数字じゃダメだよ

711 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 00:30:44.11 ID:CDGz4c1c0.net]
電話番号だからどうとか関係ない
用途によって扱いが違うだけ
コンソールに表示したいんだから文字列にする

712 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 00:50:48.14 ID:FwO1SqIy0.net]
>>678
まあ、>>681 でいいわけだがVSから入るとMain と Formの関係がなかなか理解できんよな

そういうの解説してる入門書は少なくて
オレは高橋なんとかの「やさしいC#」の最初の方読んでようやく分かった

713 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 01:25:40.38 ID:kCH+s2JN0.net]
スッキリのJSとかC#バージョンを出版して下さい

714 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 06:51:13.60 ID:Pxy1busQ0.net]
Entity Frameworkにの和書って絶望的に無いけどお勧めある?
使ってるヤツ居るんか。

715 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 07:38:32.26 ID:vjYSWXcI0.net]
>>699
webなら普通に使ってる
ef単体に絞った本は見たことない
asp.net mvc の本ならefに触れてるはず
でも正直本は役に立たんかったわ
stackoverflowが一番役立った

716 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:00:58.58 ID:tTECqdhTa.net]
最近書籍弱いよね
本屋に行ってもオワコンなのか?と思うぐらい何もない

717 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:04:53.37 ID:UxJjc40bM.net]
>>701
ブログとかの情報で十分な場合がほとんど

718 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:13:56.58 ID:1Z5oHBJNr.net]
>>702
それが大きそうだね



719 名前: mailto:sage [2017/10/31(火) 08:16:12.54 ID:VssU1hfBd.net]
>>695
番号にシャープを入れるんじゃなくて、電話番号クラスのうち、シャープ特番クラスを作る方が良いのでは?
そうなると電話番号インターフェイスになるが。
アメリカのアルファベットは、ありゃ数字だ。数字をアルファベットで表現してるだけ。
なので、これは元言ってた電話番号クラスに数字列と表現列を作る他ないな。
そーすりゃ日本の語呂合わせ番号も(必要があるからはおいといて)保存できる。

720 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:31:09.08 ID:znhbZmhV0.net]
日本の携帯と固定電話に対応すれば殆ど対応できるんだから、後はメモ欄でも付けてそこに書けでいいと思うんだが
そうは問屋が卸してくれないよな

721 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:39:41.31 ID:ABdbotTTM.net]
>>700
Webにあるのはef4の頃の古いのしか見当たらないね。
mvcの本はあるけど全然役には立たん。
StackOverflowが一番役に立つ悲しい現実。

722 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 08:44:22.32 ID:ABdbotTTM.net]
>>701
洋書は沢山あるんだけどねぇ。
Linux本が一般書店に平積みしていた時代が懐かしい。

723 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 09:09:00.05 ID:dHXhqPbt0.net]
〜next();と〜next double();て整数乱数発生させるか実数乱数発生させるかの違い?

724 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 10:42:59.91 ID:tTECqdhTa.net]
実数の乱数ってそりゃ誤差じゃねぇのけ?w
狙った値が作れないから
整数で出して桁合わせする
俺はね

725 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 11:11:37.78 ID:0nZAN2Wka.net]
電話番号に#や*は使わないと思うよw
あれは自動応答を操作するためのトーンを割り当ててるだけじゃないの?
そんな番号があったらダイアル回線からかけられないじゃん

726 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 11:57:51.15 ID:Q2spe3T60.net]
もともとパルスの頃は数値ではあったな
0は10回パルスだった
DTMF利用して余ったとこに#と*割り当てて
独自に使い始めたんじゃないかなあ

727 名前:デフォルトの名無しさん [2017/10/31(火) 12:06:40.36 ID:Jn8FhbAo6.net]
電話スレか

728 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 12:08:18.63 ID:yzv1EbBg0.net]
>>710
ずーっと前からあるぞ
web116.jp/shop/benri/sharp/sharp_00.html



729 名前:デフォルトの名無しさん [2017/10/31(火) 12:09:33.06 ID:lgb8DbLAM.net]
>>710
*はサブアドレスで使われる。
#は内線でよく使われるな。

730 名前:デフォルトの名無しさん [2017/10/31(火) 12:12:12.86 ID:lgb8DbLAM.net]
>>713
そういえば、そんなのもあったな。
すっかり忘れてた。

731 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 12:21:20.41 ID:OH9+jtHeM.net]
>>711
今でもパルス回線はあるだろ。

国際電話番号の表記には+81とかある。

732 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 12:33:50.13 ID:HOZp+Kdp0.net]
その+は国番号を表す記号であって
実際に+をダイヤルするわけじゃない
まあ-も()もダイヤルしないから電話番号の一部じゃないけど

733 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 12:42:10.67 ID:0nZAN2Wka.net]
>>713
NTTの回線からしかつながらないものを電話番号と言ってよいかは微妙でしょう

>>714
後者はあきらかに電話番号とは違うような...
前者は微妙だけど、普通のアナログ回線からは掛けられないものを電話番号と言えるかどうか

まあ元のお題にもどれば、テクニカルに電話番号であろうがなかろうが
電話番号として扱えるようにすべきだとは思うけど

734 名前: mailto:sage [2017/10/31(火) 12:50:04.95 ID:VssU1hfBd.net]
>>718
と言うかコメはもともとアナログ回線で掛けてるときにいまからトーン送るぞってボタンだったんだが。
内線番号に関しては、待ってりゃ交換台出るだろ。

735 名前: mailto:sage [2017/10/31(火) 12:51:28.39 ID:VssU1hfBd.net]
電話番号でないものを電話番号として扱う、がわからんなぁ。
電話番号は電話番号として扱え、ならなるほどだけど。

736 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 13:01:26.31 ID:yzv1EbBg0.net]
>>718
>NTTの回線からしかつながらないものを電話番号と言ってよいかは微妙でしょう
これはプッシュホンのサービスと同時に開始されたサービスで、当時は電話サービスを電電公社が独占していたので、他の回線なんか存在しなかった

国際電話があるじゃねーかと言うかもしれんが、国際電話から繋がらない110などの特番は電話番号じゃねー というならその反論は認めよう

737 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 13:02:30.63 ID:0nZAN2Wka.net]
>>719
それは違うでしょう。
あれは(どこのメーカーが最初に始めたのか知らないけど)ただの電話機の機能で
恐らくNTTの定めた規格でも何でもない

自由化直後の電話機はダイアル回線モードだと*押そうが何仕様が
トーン出なかったような気が

まあいい加減どうでもいいねw

>>720
DTMFを認識する自動応答マシンにトーンを送るのは電話を掛けると言わないし
明らかに電話番号じゃないでしょう。

738 名前:デフォルトの名無しさん [2017/10/31(火) 14:57:18.16 ID:PGoVot5B0.net]
ここまで電話スレ



739 名前:デフォルトの名無しさん [2017/10/31(火) 16:58:47.83 ID:tljKmL6i0.net]
visualC#のXNAでブロック崩し作ってるけどクソめんどくさいな作成+整理整頓するだけで混乱する
コンソールでしょぼいので完璧だって思ってると痛い目見るな

740 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 20:15:22.60 ID:VEAfn5MF0.net]
へぇ〜できたら公開して見せてよ

741 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 21:03:25.88 ID:tTECqdhTa.net]
こうやってプログラム=タダって概念が世の中に蔓延したよね
広告費で稼ぐ世の中になったけど

742 名前:デフォルトの名無しさん [2017/10/31(火) 22:07:06.75 ID:UyVEd0rJ0.net]
飢餓ベネズエラ「1600%インフレ率」で仮想通貨が生活の柱|ビットコインマイニング(採掘)で生き残る
virtualmoney.jp/I0001275
「ビットコイン」新世界のベネズエラ:自由を求める、採掘者たちの反逆
https://www.fuze.dj/2017/01/venezuela_mining.html
ベネズエラ、ビットコインマイナーが10万人規模に
btcnews.jp/5c5uq4ei13034/
ジンバブエではビットコインが80万円?自国通貨がインフレしている国の仮想通貨需要について
coinpost.jp/?p=5803
ビットコインとは?投資で儲かる仕組みと危険性を分かりやすく解説
https://enjoyrock.jp/bitcointoha-4370

743 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 22:10:24.98 ID:ryJZgMRZM.net]
ビットコインとはなんぞや?

744 名前:デフォルトの名無しさん [2017/10/31(火) 22:46:58.06 ID:4MZcs+cX0.net]
FindWindowで見つけたウインドウの画面をキャプチャすることはできますか?
ウインドウが隠れていてもキャプチャできるようにしたいのですが
PrintWindowと組み合わせようとしてもよくわからないです

745 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 22:57:04.76 ID:QkT+8axj0.net]
隠れている部分はそもそも描いてないでしょ

746 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 23:28:17.44 ID:P79QNeNU0.net]
そんなXP時代じゃないんだから…

隠しAPIのDwmGetDxSharedSurfaceが定番やね
今でも使えるのか知らんけど

747 名前:デフォルトの名無しさん [2017/10/31(火) 23:31:19.87 ID:4MZcs+cX0.net]
DWMも使ってみたいのですが日本語解説のサイトが全くなくて…
英語出来ないとやっぱりだめですね

748 名前:デフォルトの名無しさん mailto:sage [2017/10/31(火) 23:59:12.73 ID:RzsX96BS0.net]
>>732
最小化されてなければ重なってようが画面からはみ出ていようが適当なBitmap作って
using (var g = Graphics.FromImage(bmp)) PrintWindow(hWnd, g.GetHdc(), 1);
とかでも済みそうだが。環境依存だろうから.NETには碌に無いしWin32APIの領分だなぁ



749 名前: mailto:sage [2017/10/31(火) 23:59:53.09 ID:KKSGwBSw0.net]
>>722
確かに、規格ではないな。そういう意味では、それこそ自由化されたあとはNTTのローカルルールに縛られず、すべてが番号として取り扱われるべきなのかもしれん。

自動応答マシンの特定のメニューまで進むのを「番号」と言っていいと思うぞ、俺は。

750 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 00:21:59.34 ID:L5KemQuba.net]
Win32関数のリファレンス日本語だけになっちゃったんだw
ほんといらんことするよなMSもGoogleもw

751 名前:デフォルトの名無しさん [2017/11/01(水) 04:36:44.91 ID:dB2PwCEI0.net]
https://ideone.com/jcN0mM
別のプログラムのキャプチャを取りたいのです
別のプログラムのProcessオブジェクトを取得してPrintWindow関数につっこみたいのですが
どうしたらよいでしょうか?

752 名前:デフォルトの名無しさん [2017/11/01(水) 04:39:54.64 ID:dB2PwCEI0.net]
GetProcessesByNameでオブジェクトを取得した後
↑に貼ったコードのCaptureControlにthisの代わりにどうやって渡せば良いでしょうか?

753 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 05:32:38.62 ID:vhfog6b10.net]
>>736-737
FindWindowと云うからP/Invokeは理解しているのかと思いきや、躓いてるのはソコかいってかコピペかい
ProcessオブジェクトにはメインウィンドウハンドルだけならMainWindowHandleプロパティが既に用意されてる
枠の有無でGetWindowRectやGetClientRect等のWin32APIでサイズ取得、枠無しならnFl

754 名前:agsにPW_CLIENTONLY(1)を指定

LPRECTをout Rectangleとしても互換性はあるが、メンバの意味は異なるので注意。あとOpenGL画面とかは怪しかった気もする
[]
[ここ壊れてます]

755 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 12:54:43.00 ID:wiqlBWqs0.net]
初歩的なことで申し訳ないですが、
C#をx86でコンパイルしたときlong型は何バイトですか?

32ビットですよね?

long型な引数を持つC++で作られたDLLを呼ぼうとしてるんですが
C#側もlong型にするとバイオレンスエラーが出るんです

756 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 13:00:28.87 ID:xMsiUXHhM.net]
>>739
64じゃないの

757 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 13:01:02.25 ID:DoTChEv+0.net]
C# の long型 の .NET型は System.Int64
64ビットだよ

758 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 13:30:22.67 ID:JNwvccyI0.net]
どうでもいいけどバイオレンスじゃなくてバイオレーションな



759 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 13:34:10.98 ID:G3xjFDeG0.net]
デジタル バイオレンス 略して DVか

760 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 13:43:47.20 ID:wiqlBWqs0.net]
ありがとうございます。
x86指定でもC#は64ビットですか。

つまり、x86なC++のlong = C#のint ってことですね
ありがとうございました。

761 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 14:07:25.95 ID:vhfog6b10.net]
>>744
x86なC++というかILP32ね、LLP64でもlongは32bitだから、Windowsに限り常に32bit
C#は常にintが32bit、longが64bit、IntPtrがポインターサイズでCIL名native int

762 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 14:12:57.28 ID:a3/dOAjga.net]
バイオレンスww

763 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 14:36:04.02 ID:wgMqyCilM.net]
>>745
IntPtrは64bitと32bitで自動的にサイズが変わる罠があるよね

764 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 14:53:25.19 ID:58WxqpRI0.net]
罠じゃなくてそれをマネージド上で扱うことを目的とした型やねんで

765 名前:デフォルトの名無しさん [2017/11/01(水) 15:34:33.63 ID:DJIAeWHo0.net]
>>725
当分出来ねえから期待しないでおけ

766 名前:デフォルトの名無しさん [2017/11/01(水) 15:53:44.71 ID:dB2PwCEI0.net]
>>738
すいません高度すぎてちょっとよくわからないです
FindWindowでウィンドウハンドルを取得して画面をキャプチャするプログラムは作れたのですが
ウインドウハンドルしか取得してないのでウインドウの大きさが設定できなくて困っています
(現在ピクセル数で設定)
GetWindowRectやGetClientRectを使おうとしてもRECT構造体の定義がよくわからなくて出来ません。

GetProcessesByNameで取得したProcessオブジェクトからハンドルとオブジェクトの大きさを取り出すにはどうしたら良いでしょうか?

767 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 16:36:24.43 ID:4v6bi03L0.net]
>>750
www.pinvoke.net/

768 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 16:43:34.62 ID:wgMqyCilM.net]
>>750
https://msdn.microsoft.com/ja-jp/library/a5ch4fda.aspx



769 名前:デフォルトの名無しさん [2017/11/01(水) 17:06:28.99 ID:dB2PwCEI0.net]
>>751
よくわからないですが後で読んでおきます
>>752
そのページは見たことあるんですが意味がよくわからないです…

すごく低レベルな質問だと思うのですが
Process[] ps = Process.GetProcessesByName("notepad");
foreach (System.Diagnostics.Process p in ps)
{
textBox1.Text = p.MainWindowTitle;
}
だと問題ないのに
Process[] ps = Process.GetProcessesByName("notepad");
textBox1.Text = ps[0].MainWindowTitle;
では動作しないのは何故でしょうか?

770 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 17:12:20.00 ID:a3/dOAjga.net]
>>753
後者だけ動かない理由はないから何か勘違いしてるんでしょう

771 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 17:29:00.13 ID:wgMqyCilM.net]
>>753
動作しないの内容が曖昧です。

772 名前:デフォルトの名無しさん [2017/11/01(水) 17:35:15.46 ID:dB2PwCEI0.net]
すいません動きました!
メモ帳開いていなかっただけでした…

773 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 17:37:14.82 ID:qqAk/1TWM.net]
勉強用トイプログラムで抽象クラスを継承したクラスにインタフェースを継承したのですが、実務の世界ではよくやる事でしょうか?


774 名前:抽象クラス側にインタフェースのメソッドを書くとか美しく無いので邪道な事をしてるかもと心配になりまして []
[ここ壊れてます]

775 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 17:46:07.56 ID:xAl8OFsq0.net]
>>744
公式にアンマネージとマネージでのデータ形式のリファレンスがあるからそこ見ておいた方がいい
https://msdn.microsoft.com/ja-jp/library/ac7ay120(v=vs.110).aspx
C#でlongは紛らわしいから使わない方がいいと思う
>>753
構造体がわからないとWinAPI使えないよ
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-structs

776 名前:デフォルトの名無しさん [2017/11/01(水) 17:55:43.82 ID:DJIAeWHo0.net]
ボールとか壁に当たって反転させるときに
int speed=1;
更新処理
position.x+=speed;
if(800<position.x)
{
speed*=-1;
}
こうゆう反転っておkなの?+=って無駄じゃねえかとか言われない?

777 名前:デフォルトの名無しさん [2017/11/01(水) 19:13:00.27 ID:dB2PwCEI0.net]
https://ideone.com/gKjIFo
見よう見まねでRECT構造体を使おうとしているのですが
17行目の&rectWinという所で以下の2つのエラーが出てしまいます
何が間違っているのでしょうか?

ポインターおよび固定サイズ バッファーは、unsafe コンテキストでのみ使用することができます。
引数 2 はキーワード 'out' と共に渡す必要があります。

778 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 19:18:35.70 ID:JgbY2jhcM.net]
>>760
その文面でググれば多分わかる

というよりメッセージどおりだよ
引数に out 付けよう
意味が分からないなら調べよう



779 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 19:18:49.98 ID:C3RJkmbpd.net]
>>757
人間クラスと継承した社員クラスがあるとして
体重身長インターフェイスは人間クラスに、入社日退職日インターフェイスは社員クラスにってのが普通だと思うけど
抽象クラスだから付けないって考え方は美しくないんじゃないかな?

780 名前:デフォルトの名無しさん [2017/11/01(水) 19:22:01.17 ID:dB2PwCEI0.net]
>>761
できました!有難う御座います!!!!!!!

781 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 04:46:41.42 ID:leSyCza7a.net]
なにこれ
www.bityet.us/FVNN6-t6.jpg
https://goo.gl/kLNWUT

782 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 07:15:17.22 ID:pmQPnNAeM.net]
>>762
なるほどその通りですね
営業志望の未経験者なのにC#開発しろと言われ正しくOOしてるか不安でした
参考になります
OOとは徹頭徹尾ヴァーチャルマシーンと言われてもピンと来なくて。。。

783 名前:739 mailto:sage [2017/11/02(木) 13:32:08.71 ID:wZG1ntZl0.net]
みなさんありがとうございました。

C++側で void test(long aa[2]);

みたいに定義されてるやつをC#から使うときも IntPtr でやりくりするしかないんですよね。

784 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 14:07:36.43 ID:RiVwOr7+M.net]
c#はインタープリタなので遅いって言われたw

785 名前:デフォルトの名無しさん [2017/11/02(木) 15:50:21.67 ID:i1tOzlAd6.net]
バイナリプログラムもCPUがインタープリットしてるしインタープリタだなw

786 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 16:06:47.45 ID:/X9eIi7aM.net]
>>766
いやintを2つ並べただけの構造体を用意してrefかout使えばいい

787 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 16:12:10.17 ID:KloAouzuM.net]
>>767
コンパイラ型なんだけど。。
あほなの?

788 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 16:17:55.02 ID:wZG1ntZl0.net]
>>769
pack意識したうえで配列という手もありますね
どっちにしろコード量は増えますね

C# 側で ref を付けるだけで
勝手にIntPtrやらマーシャル確保・代入・解放してくれたらいいのに・・・
char * → string みたいな超絶ラクチンな方法でさ



789 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 16:20:47.53 ID:wZG1ntZl0.net]
ちょっと早合点で書き込んでしまいましたが

[StructLayout(LayoutKind.Sequential, Pack = 4)
struct struct_aa
{
public int aa1;
public int aa2;
}
struct_aa aa;

としたうえで

test(ref aa);

で出来ちゃうんですか!?

790 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 16:43:51.34 ID:/X9eIi7aM.net]
>>772
それでいけるはず

791 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 17:08:27.57 ID:hwMc8ywnM.net]
>>770
昭和のおっさんなので仕方ない

792 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 17:12:38.78 ID:oE5JXb4z0.net]
配列でそのまま渡せばいいのにわざわざ変な方法使うとか
>>766
C#から渡すときはvoid test(int[] aa);でいいんだよ。Visual Studio以外なら知らん
>>772>>773
アンマネージ側で定義されていない構造体を勝手に作って渡すって考え方がおかしい
アンマネージ側で要求されている引数の形式に合わせるのが基本だろ

793 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 17:42:00.04 ID:wZG1ntZl0.net]
ググって最初のほうに出てくるサイトで char * 以外は全てマーシャってるので
てっきり IntPtr を駆使すると思い込んでました。
配列じゃないポインタ渡しは ref/out で何の造作もなく出来ました。
(マーシャル関連のコードを大量に書いていたのが馬鹿らしくなるほど)

んで配列ですが

// C++(x86)
extern "C" __declspec(dllexport) void test(long a[2]);

// C#
[DllImport("usrbatch.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void test(out int[] a);

int[] a = new int[2];
test(out a);

で、バイオレーションエラー出ちゃいます。。。

794 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 17:52:53.60 ID:oE5JXb4z0.net]
>>776
C++側からC#にoutする形で返したいのならC#からポインタにして渡す
そのコードのC#側のout(ref)だと変な動きにしかならない。消せ

795 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 18:01:00.66 ID:wZG1ntZl0.net]
うわぁ、ありがとうございます。

先方で値が書き換わる場合には ref/out を付けないといけない
(付けなかったら配列だろうが値渡しになる)

だと先入観で思い込んでました。
配列だったらC++と同じくポインタ渡しになるんですね!

// C#
[DllImport("usrbatch.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void test(int[] a);

int[] a = new int[2];
test(a);


で、うまくいきました。
(C++側で設定された値が戻ってきた)

796 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 18:34:34.93 ID:OVuNv67Pa.net]
>>778みたいな場合、アンマネージド関数の宣言の仮引数にOutAttributeを付ける必要が
あるのかないのか、MSDN読んでもいまいちよく分からん

https://msdn.microsoft.com/ja-jp/library/75dwhxf7(v=vs.90).aspx
を読むとBittableな型の一次元配列の場合不要のようにも思えるが、

https://msdn.microsoft.com/ja-jp/library/hk9wyw21(v=vs.90).aspx
のサンプルでは属性がついてる

797 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 22:14:18.55 ID:FJPOLiu40.net]
>>779
そのリンク先に書いてあるぞ

これらの型は、呼び出し元と呼び出し先が同じアパートメントに属する場合には、In/Out パラメータとしてマーシャリングされるように見えることがあります。
ただし、そのような型は実際には In パラメータとしてマーシャリングされるため、引数を In/Out パラメータとしてマーシャリングする必要がある場合には、InAttribute 属性と OutAttribute 属性を適用する必要があります。

Outがないと保証されない

798 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 22:48:20.45 ID:uoctVHYW0.net]
>>778
ref/outは書き換え云々というより変数の参照で初期化の必要があるかどうか、P/Invokeでは構造体くらいにしか使わぬ
配列は参照型なので参照の参照になるし、そのままでもオブジェクトヘッダ+要素数を含むのでネイティブ配列へはちょっとズラしている

>>779
上のページに>>780の通りずばり書いてないか?コピーと固定 # 書式指定された Blittable クラスのメモとかにも。そういう事ではなく?


既定のマーシャリング動作を理解し、MarshalAs属性とIn/Out属性を駆使すれば、Marshalメソッドの出番はあまりなくなる
Marshal.UnsafeAddrOfPinnedArrayElementとかもArrayWithOffsetというお誂え向きな構造体がある
手動でIntPtrを捏ね回すのが有効なケースもあるが。ちぃと古いけど↓の記事はよく纏められている
https://msdn.microsoft.com/ja-jp/library/ff647812.aspx#scalenetchapt07_topic4



799 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 22:54:42.83 ID:vimPIuS6M.net]
GCがうざいならstackallocを使う手もあるよ
unsafeになるけど、マネージ配列のマーシャリング使ったとしても境界外へアクセスしたら普通にクラッシュするんだし
むしろ危険な操作は明らかに危険とわかったほうがマシ

800 名前:デフォルトの名無しさん mailto:sage [2017/11/02(木) 23:07:34.82 ID:OVuNv67Pa.net]
>>780-781
レスどうも

よく分からない箇所は結局、>>780に引用してある部分の
>同じアパートメントに属する場合には

この但し書きかな。
同じアパートメントって何だ?

>>778のケースでは結局Out属性なしでも期待通り動くみたいだけど、
逆にBittableであっても明示的にOutを付けないといけないのはどういう
場合なんだろうか

801 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 01:31:28.84 ID:zjyHgUY90.net]
>>782
stackallocはスタックを理解していなければ危険すぎないか、少量で確保速度が最重要ならアレだけど
unsafeポインターを使うならfixedでも境界チェックは外れるし、そのあたりで…

>>783
アーその辺はCOMの話かな、COMマーシャリングが挟まれると固定では済まなくなるという
https://msdn.microsoft.com/ja-jp/library/eaw10et3.aspx#marshaling_and_com_apartments
具体例については…直接COM使った経験がC++でちょろっとしか無いのでわっかんないや(無能

802 名前:デフォルトの名無しさん [2017/11/03(金) 04:43:40.14 ID:ZqwqQq4y0.net]
Parallelの動きがわからん
10個のZIPを同時に解凍する処理するとして

Parallel.Forで実行したらどうなる?
ちなcore i7
エラー?

803 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 09:51:59.78 ID:wXWM393Ar.net]
1.5倍(適当)くらい速くなる

804 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 10:02:10.84 ID:YKGzMcXY0.net]
>>785
同時実行数はCPUのスレッド数だから8個同時に展開して、2個は待ちになるんじゃね
CPUより展開後ファイルサイズによってはHDD書き込みがネックになりそうな気もするけど

805 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 11:00:02.96 ID:QTbHfBOQ0.net]
>>787
オイ!

806 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 15:48:21.85 ID:m874gEkx0.net]
>>786
1.5ってすごくいいよ

>>787
動き知りたいんよ
どうなるか

807 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 15:52:47.69 ID:OoLmNkMra.net]
何を期待してるか知らないけどやればいいじゃないか

808 名前:デフォルトの名無しさん [2017/11/03(金) 17:10:18.04 ID:bRMk/YPf0.net]
c#で画像の黄色部分だけを白にして残りを黒にする様なことはできますか?



809 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 17:32:15.18 ID:tw8puOLsM.net]
>>791
ProcessでImageMagick呼べば一瞬でできる
似た色はどこまで許容するのかとかいちいち個別に作ってたらキリがない

810 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 18:22:36.00 ID:QTbHfBOQ0.net]
DataTable dt = new DataTable();

bool foofunc(ref DataTable dt)
{
  ・・・・
  adapter.Fill(dt);

こんなコード見たんだが何かメリットあるのか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<263KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef