C#, C♯, C#相談室 Part94

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 935f-5Uxj)
垢版 |
2019/03/20(水) 18:57:36.47ID:ZZcTomnN0
!extend:checked:vvvvv:1000:512
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part93
http://mevius.5ch.net/test/read.cgi/tech/1492818720/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/03/20(水) 19:00:25.69ID:ZZcTomnN0
■関連スレ
初心者の質問向けはこちら
ふらっと C#,C♯,C#(初心者用) Part141
http://mevius.5ch.net/test/read.cgi/tech/1544838367/
2019/03/20(水) 19:08:02.73ID:ZZcTomnN0
■過去スレ
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/
C#, C♯, C#相談室 Part91 (実質Part92)
http://echo.2ch.net/test/read.cgi/tech/1467211515/
C#, C♯, C#相談室 Part92 (実質Part93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/
C#, C♯, C#相談室 Part93 (実質Part94)
http://mevius.5ch.net/test/read.cgi/tech/1492818720/

>>1
ここは、実質Part95だったorz
2019/03/20(水) 21:27:00.84ID:jN76oFxX0
>>1
2019/03/20(水) 21:30:27.06ID:jN76oFxX0
↓が先に立っていたからそっちを使った方が良さげ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
2019/04/25(木) 12:02:26.84ID:4R4XZvlv0
C#でセレニウムにチャレンジしています。
Chromeを起動すると「Chromeは自動テスト ソフトウェアによって制御されています」と
メッセージが表示されてうざいです。

これを非表示にする方法はないでしょうか?
2019/04/25(木) 19:25:05.43ID:AhYgPDY90
マルチ乙
2019/05/02(木) 16:30:08.45ID:h4DYiPpB0
「練馬350 る 8 08」
〜〜〜〜〜〜〜〜

DQN運転手につき注意!
DQN運転手につき注意!
DQN運転手につき注意!
DQN運転手につき注意!
9デフォルトの名無しさん (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 10:14:35.66ID:TxMJ3ToxF
質問です
C# の struct で
引数無しのデフォルトコンストラクタを上書きできないのはなぜでしょう?
回避方法はありますか?
public struct Hoge {
public int a;
public int b;
public Hoge() { this.a = 123; this.b = 456; }
}
みたいなのがやりたいです
10デフォルトの名無しさん (ワッチョイ 233e-8H9x)
垢版 |
2020/04/06(月) 10:39:04.32ID:dJUJ6mUM0
public struct Hoge
{
public int a = 123;
public int b = 456;
}
でだめ?
11デフォルトの名無しさん (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 10:39:59.95ID:TxMJ3ToxF
コンパイルエラーになります
12デフォルトの名無しさん (ワッチョイ 233e-8H9x)
垢版 |
2020/04/06(月) 10:45:59.32ID:dJUJ6mUM0
残念です。あきらめてclassにしませう。
2020/04/06(月) 10:58:20.70ID:sF8ihuq40
暗黙的な既定のコンストラクタが挿入されないようにとのC#コンパイラの最適化の都合
特に回避策はない

標準ライブラリで

struct Vector3 {
 ...
 public static Vector3 Up = new Vector3(0, 1, 0);
}

みたいなのはある
14デフォルトの名無しさん (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 12:06:20.02ID:TxMJ3ToxF
レスくれたひととワッチョイ似てるけど別人です念のため
15デフォルトの名無しさん (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 12:11:49.60ID:TxMJ3ToxF
>>13
あまり有難みが無いですが・・・とりあえずレスくれたみなさんありがとう
class にしたくない理由は struct のネストをしたいのと
そのとき struct を Marshal.StructureToPtr して使いたいのですが
ネストの内側に class が含まれてると not blittable とか出て困ってるんです
2020/04/06(月) 12:21:26.65ID:ujGPJmEH0
https://teratail.com/questions/251675

回答つかなかったから再投稿して古い質問を削除依頼って、今まであんまり見なかったな。
2020/04/06(月) 12:21:49.56ID:ujGPJmEH0
ごめん投稿先間違った。
2020/04/06(月) 15:27:18.81ID:84GlTNOir
外側がクラスでも良いならラップするクラス作れば良いだけだけど
1915 (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 15:36:35.10ID:TxMJ3ToxF
すみません間違いました
not blittable が出るのは
struct s2 の中に class c1 があるとして
GCHandle h = GCHandle.Alloc(s2, GCHandleType.Pinned);
IntPtr ptr = hndl.AddrOfPinnedObject();
// ptr を利用
h.Free();

ちなみに
struct s2 の中に struct s1 があるとして
同じことをしたときは問題無いです
20デフォルトの名無しさん (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 15:40:47.44ID:TxMJ3ToxF
>>18
struct を定義するときにメンバに class があるとき
その class を blittable にする方法を知りたいです
2020/04/06(月) 16:24:25.71ID:sF8ihuq40
そのclassの内容によるとしか…
無制限にマーシャリングできるわけでもないし
classのメンバがblittableならそのままstructにすりゃいいだけだけど

参考になるか知らんがstringを含む場合

[StructLayout(LayoutKind.Sequential)]
struct Foo {
 public int id;
 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
 public string name;
}

class Program {
 static void Main(string[] args) {
 var sizeInBytes = Marshal.SizeOf<Foo>();
 Console.WriteLine($"SizeOf={sizeInBytes}");

 var coTaskMem = Marshal.AllocCoTaskMem(sizeInBytes);

 var foo = Marshal.PtrToStructure<Foo>(coTaskMem);

 foo.name = "John";
 Console.WriteLine(foo.name);

 Marshal.DestroyStructure<Foo>(coTaskMem);

 Marshal.FreeCoTaskMem(coTaskMem);
 }
}
22デフォルトの名無しさん (アウウィフ FFe9-8H9x)
垢版 |
2020/04/06(月) 16:44:22.28ID:TxMJ3ToxF
>>21
そもそも内側は struct で充分なんですが
初期値を入れたいのでそのためには class でないといけないとしたら
class にするとエラーになるのでやっぱり困るっていう話です
struct でデフォルト値入れられないと割り切れば済む話です
2020/04/06(月) 18:03:23.76ID:7X8pPa4E0
2度手間っていうか面倒くさいけどStructureToPtrでバイトストリームに一括で変換するのが
目的ならば、外に見せる部分はclassで作っておいて中にstructを定義する
structの要素にはプロパティでget/setする初期値はclassのコンストラクタで設定
classにバイトストリームを取り出す(StructureToPtrに絡むロジック)メソッドかプロパティを
定義するみたいなのじゃダメなのかな
class point {
 public point () {
  x = 0;
  y = 0;
 }

 private _point _Struct;
 public int x {
  get { return _Struct.x; }
  set { _Struct.x = value; }
 }
 public int y {
  get { return _Struct.y; }
  set { _Struct.y = value; }
 }
 public byte[] bytestream {
  get { return structToPtrFunc(_Struct); }//メソッドは別途作成
 }

 [StructLayout(LayoutKind.Sequential)]
 private struct _point {
  int x;
  int y;
 }
}
24デフォルトの名無しさん (エムゾネ FF43-8H9x)
垢版 |
2020/04/07(火) 10:26:44.15ID:KScFPzRrF
むしろ StructureToPtr を使いたくないっていう話です
やりたいのはこっちです
GCHandle h = GCHandle.Alloc(s, GCHandleType.Pinned);
IntPtr ptr = h.AddrOfPinnedObject();
// ptr 操作
h.Free();
途中のレスで一回変な事を書いてしまったので混乱させてごめんなさい
25デフォルトの名無しさん (エムゾネ FF43-8H9x)
垢版 |
2020/04/07(火) 10:30:31.32ID:KScFPzRrF
意図は「無駄なコピーを極力避けたい」です
2020/04/07(火) 10:59:30.33ID:FIqFPKAc0
なら参照型にすればメモリ領域は節約できるでしょ。
2020/04/07(火) 13:31:26.68ID:10XGXpve0
意図がそれならそもそもなんで親に値型使ってんのってところまで後退しちゃうぞ
値型にGCHandleのピン付けってそこだけ見ると意味不明だし
省略している「ptr操作」の内容次第では初っ端からアプローチを間違えてる可能性がある
28デフォルトの名無しさん (ワッチョイ 2b7c-Wy2p)
垢版 |
2020/04/07(火) 13:56:15.48ID:xToLYP7L0
Cの構造体って構造体の中に別の構造体入れてもコピーが発生する訳じゃない
(子の構造体をいちいち作る訳じゃないから)
C#をCと同じと思わない方が良い
2020/04/07(火) 18:25:34.04ID:hoGla/3+0
>>28
C#の場合、classは、Heapに実態を確保して変数は参照型で、
structは、スタックなどに実態を確保して、変数は値型だと
聞きました。
C++は、strucとclassは、protected/public などのaccess control以外に
違いが無いこととは対照的です。
というわけで、C#の場合でも、structに関しては別のstructの中に入れた場合
は、C++と同じような動作なのではないかと思われます。
2020/04/07(火) 19:08:13.99ID:yHbrhPie0
そもそも、「無駄なコピー」ってのがどんな想定なのかわからん
2020/05/27(水) 18:07:50.45ID:LUVXPnpcr
質問いいですか?
C#のアセンブリの読み込みってどういう手順で行われてるんですか?
同じバージョンの.net core から.net coreを呼び出してるのにTypeIntializationExceptionが発生します
たぶん正しいアセンブリが読み込めてないのだと思うのですが、アセンブリの読み込みタイミングやバージョンを指定することは可能なのでしょうか
2020/05/27(水) 18:29:21.50ID:LUVXPnpcr
上のお話見てると突き詰めれば値型と参照型の定義の問題になってきそう
C#の構造体は中に値型以外を詰め込むとその部分はCレベルで言うポインタのポインタを保持する形になってコピー時の挙動以外はclassと大差ないものになっちゃうよね
ポインタのポインタの値型だと言えばそうなのかもしれないけど
2020/05/27(水) 21:06:51.81ID:wHIUQvvs0
>>31
単に静的コンストラクタ内で例外が出てるだけじゃね?
例外型だけじゃなくて例外メッセージやスタックトレースも読んで
2020/05/27(水) 23:51:33.69ID:LGEhqROa0
参照してるdllにエントリポイントがないと言われるだけでそれ以上検索してもなにも出てこないです

こう聞いた方がいいのかもしれないです
.net frameworkの時は自前でシステムのアセンブリ参照できましたが
.net coreにも似たような仕組みはあるのでしょうか

こういうアセンブリ関係の問題は.net frameworkの時は自前で参照加えたらできたんですけど
.net coreになってフレームワーク二つしか選択肢がなくなって細かい参照が出来なくなってますがそれはどこがどういう風に解決してるのでしょうか?

特定のライブラリが使いたいというよりそこら辺の内部仕様が知りたいです
2020/05/27(水) 23:59:10.55ID:LGEhqROa0
あ、アセンブリが読み込めてないと思った一番の理由はdllでなくプロジェクトにcsで組み込んだらちゃんと動いたからです
そういう意味で言語レベルでのミスはないです
36デフォルトの名無しさん (アウアウエー Sa23-1zQY)
垢版 |
2020/05/28(木) 11:28:38.46ID:vYrFHFhya
csc -reference:(.NetCoreのpath) hoge.cs でいけるよ
2020/08/09(日) 14:22:49.34ID:wMn4aE4e0
WindowsFormで写真データ取り込みを作ってるんですが、
DriveInfo.GetDrives()してもWindows10に接続して認証したあとの
iPhoneのドライブが読み取れず・・・
どうにか拾えないもんでしょうか?
2020/08/09(日) 18:07:11.93ID:xLYoDobK0
あれは普通のディスクとしてマウントされてるわけじゃなくてメディア転送プロトコルってやつだから、
それじゃアクセス出来ないと思う。
2020/08/09(日) 18:44:35.04ID:8DR9OUqp0
検索キーワード MTP、WPD かな
40デフォルトの名無しさん (スッップ Sd33-KRae)
垢版 |
2020/08/10(月) 07:48:42.24ID:sJEhM+RBd
>>38 >>39
ありがとうございます
よく調べてみます
2020/08/12(水) 23:54:10.55ID:i8qk9stm0
カレントディレクトリに
\data¥
というディレクトリを作成したいのですが、
どうすればいいのでしょう?
2020/08/13(木) 09:33:35.31ID:qi529V0c0
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.directory.createdirectory?view=netcore-3.1
2020/08/14(金) 00:43:36.55ID:ZEhSJMBs0
>>42

できました。ありがとうございました。m(_ _)m
2020/08/16(日) 15:05:57.24ID:fvXawAJc0
機器構成の設定を記載したconfigファイルをアプリ上で作成して、
アプリ実行時にconfigの内容を変数に読み込むことを行おうと思ってます。

configファイルって普通どんなふうに書くんだろうと思って、
あるアプリのconfigファイルを覗いてみたところ下のような感じになっていました。

[Config]
StartUpLeft=-2147483648
StartUpTop=-2147483648
StartUpWidth=640
StartUpHeight=480
SaveWindowPosSize=1
SaveWindowRectLeft=597
SaveWindowRectRight=3645
SaveWindowRectTop=1256
SaveWindowRectBottom=3436
SaveWindowMaximize=0

このテキストファイルを
string line = sr.ReadLine();
// 読み込んだ一行をカンマ毎に分けて配列に格納する
string[] values = line.Split('=');

とすると偶数のvaluesに値が入ってるからこれを使用するみたいな感じでOK?
〇〇できちっと書けやぁ!みたいな形式があったら教えて下さい。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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