トップページ⇒tech
1001コメント291KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001ななしぃ#2007/11/18(日) 15:53:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0261デフォルトの名無しさん2007/12/01(土) 20:11:44
>>258
何言ってんのかわからない。
0262デフォルトの名無しさん2007/12/01(土) 20:53:48
>>260
ほぼ同じ作りったってコードみなきゃ話にならない
0263デフォルトの名無しさん2007/12/01(土) 21:24:30
>>258
なにがしたいのかよくわからんけど
そのサンプルは、こうしたらこんな風に状態が変わるよっていうだけのことで大した意味は無いだろ
LinkedListが自動的にリンクリストを作ってくれるから
余計なこと考えずに素直に使えばいい
02642632007/12/01(土) 21:30:01
誤解を招く書き方だったかも
そのサンプル通りに使えば自動的にリンクリストが作られる
要素をリンクしていくのはLinkedListの仕事だから余計なこと考えなくていい
0265デフォルトの名無しさん2007/12/02(日) 00:28:31
>>264
サンプル通りにやればリンクリスト作られるのは分かるんですが、
最初入れるデータが無い状態で、LinkedListNodeのインスタンス
が作れないので困ってます。
サンプルだと、
LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
"orange"を最初に入れてますけど、
LinkedListNode<String> lln = new LinkedListNode<String>();
こうするとエラーになる点と、

LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
LinkedList<String> ll = new LinkedList<String>();
ll.AddLast( lln );

最初の1回目だけLinkedListにLinkedListNode入れて、2回目以降
の処理では。
ll.AddFirst( "red" );
ll.AddLast( "yellow" );
と直接データをLinkedListに入れてるので、1回目と2回目以降で処
理を分割させないと駄目なので、1回目と2回目を外見から見た時に
同じ操作でリンクさせて行くようなクラスを作りたいんですが、その
作り方が分からないのです。
0266デフォルトの名無しさん2007/12/02(日) 00:37:08
Facadeデザインパターンを実装すればいいじゃん。
0267デフォルトの名無しさん2007/12/02(日) 00:49:23
>>258
LinkedList<T>はノード全体を管理しているのだから、
そのイメージのような空のノードなんて作る必要はなく、
LinkedList<T>のインスタンスに直接AddLastすればいいぞ。

そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
0268デフォルトの名無しさん2007/12/02(日) 01:14:00
>>267
今MSDNでLinkedListとLinkedListNodeをもう一度見てた所ですが、
ちょっと頭混乱して来ました…_| ̄|○

なんか見てると、264氏や267氏の言われるようにLinkedListに直接
突っ込んで行けば良いのは分かってきましたが、LinkedListNodeと
LinkedListとの関係が分からなくなってしまいました。

> そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
私の言いたいのも正にそこでして、自クラスのコンストラクターで空
のノードを用意出来れば良いと思ってたので、
LinkedListNode<String> lln = new LinkedListNode<String>();
としたかった訳ですが、これだとコンパイルエラーとなります。

リストにデータを入れて行く場合は良いのですが、リストからデータ
を読む場合や消す場合、LinkedListNodeのPrev/Nextが必要になる
と思うのですが、その場合どの様にすれば良いでしょうか?
0269デフォルトの名無しさん2007/12/02(日) 02:07:05
>>268
LinkedListからLinkedListNodeを取り出したければ、
LinkedListのFirst/Lastプロパティ。ほかFind/FindLastメソッドも。
こっちからLinkedListNodeを作る必要はない。

LinkedListの要素をなめたいだけならforeachにも突っ込める。
0270デフォルトの名無しさん2007/12/02(日) 06:57:57
クラスってもんを勉強しなさい。
そもそも内部構造の詳細を意識しなくても利用できる、
内部構造の違いにかかわらず操作できる、
ようにするためにコレクションのクラスがあるんだから。

LinkedListNodeは構造を意識した直接的な操作も
サポートするために使えるようになってるだけで
コレクションを表すのはあくまでLinkedListの方、使うのも普通はこっち。
0271デフォルトの名無しさん2007/12/02(日) 14:09:05
初期化は
LinkedListNode<string> lln = new LinkedListNode<string>(null);
としておくか、アイテムなければ
= new LinkedListNode<string>(null);
するかでいいんじゃね?
0272デフォルトの名無しさん2007/12/02(日) 14:09:56
訂正

としておくか、アイテムがなければ
= new LinkedListNode<string>(1つ目のアイテム);
するかでいいんじゃね?
0273デフォルトの名無しさん2007/12/02(日) 14:51:04
いや別にLinkedListNode作る必要ないから
LinkedList<string> ll = new LinkedList();
だけでおk
0274デフォルトの名無しさん2007/12/02(日) 17:40:13
ご解答戴いた皆さんありがとうございました。やっと理解出来ました。
LinkedListNode自体がデータを含んでいる実体な訳ですね。
で各LinkedListNodeをLinkedListで繋いでいると。

LinkedListNodeとLinkedListの機能を逆の意味にとられえてたので混乱
してました。
リスト構造の頭と尻尾を自前で管理しようと思って、HeadNode/TailNode
見たいなのを作る為に、LinkedListNodeが存在してる物と思ってたんで
すが、LinkedListのFirst/Lastがその役割をもっててLinkedListクラス内
で自動的に管理されてる訳ですね。

どうもお騒がせ致しました。
0275たろう2007/12/02(日) 18:11:05
質問させてください。
現在googleの検索エンジンの機能をWindowsアプリで作成しようと
思っています。

作成すると言っても検索エンジンを1から作るのでは無く、
実際にはWindowsフォームのTextBoxに入力されたら(入力値を�@とする。) 

Google(http://google.co.jp)画面内の入力エリア
に�@をコピーし、Googleの検索ボタンを自動で押下し、
表示された検索一覧(データ)をWindowsフォーム内に表示したいと
考えています。

WEBページの内容を取得する方法は知っているのですが、
「Google等の検索エンジンに検索値を入力し検索ボタンを
自動で押下して検索データを取得する。」

という方法が分かりません。
何か参考になるサイト等ごございましたらお教え願います。

0276デフォルトの名無しさん2007/12/02(日) 18:13:19
>>275
"http://www.google.co.jp/search?q=�@"
0277たろう2007/12/02(日) 19:13:57
>>276
ありがとうございます。

因みに
 "http://www.google.co.jp/search?q=�@"
といったWEBページのボタンを押した時にWEBサーバに送られる情報
はどの様にして調べているのでしょうか?
何か参考になるWEBサイトをご存知でしょうか?

例えば、Googleについては上記の方法で行ける事は分かったのですが
Yahoo / MSN Serch等も時間に余裕が出来たらチャレンジしてみたいと
思っています。
0278デフォルトの名無しさん2007/12/02(日) 20:37:23
実際に検索してアドレス見ればわかるよw
0279デフォルトの名無しさん2007/12/02(日) 20:46:41
がんばれたろう

とりあえず文字列はUrlEncodeしなきゃだめよ
0280たろう2007/12/02(日) 21:04:40
>>279
ありがとたろう
0281デフォルトの名無しさん2007/12/02(日) 21:32:55
ちゃんと考えてURL円コードしないと駄目よ。
0282デフォルトの名無しさん2007/12/02(日) 21:57:36
現在、2Gくらいの大きなファイルの、
バイナリをあれこれ弄って一つのファイルに書き出そうとしています。
出力時には元のファイルを100KBずつ読み込んで、FileStreamとBinaryWriter を使って、
順次書き出ししようと考えているのですが、
BinaryWriter をCloseしないとファイルに何も書いてくれないという状況です。
どなたか、順次書き出しの手ほどき、よろしくお願いします。
0283デフォルトの名無しさん2007/12/02(日) 22:03:19
よくわからんがFlushすりゃいいんじゃないの?
0284デフォルトの名無しさん2007/12/02(日) 22:05:21
Flushのことか?
0285デフォルトの名無しさん2007/12/02(日) 22:19:54
質問です
埋め込まれたリソースとして動画ファイル(.aviファイル)を埋め込んだのですが、このファイルを再生するにはどうしたらよいのでしょうか?
.wavファイルや.jpgなどはGetManifestResourceStreamでストリームを取得した後、コンストラクタに入れてやれば再生できたのですが
動画クラスって見つからなかったので、どうやって再生したらよいのでしょうか?
MediaPlayerやDirectShowはどうやらファイル名を指定して再生するようで今回のようにストリームから再生することができませんでした。
0286デフォルトの名無しさん2007/12/03(月) 08:00:19
最近thisを記述しなくなったのですが
つけなければアクセスに時間がかかるとか何か不都合がありますか?
0287デフォルトの名無しさん2007/12/03(月) 08:12:19
無いけど付けた方が良い。
0288デフォルトの名無しさん2007/12/03(月) 08:42:46
>>287
ありがとう!早速直します!
0289デフォルトの名無しさん2007/12/03(月) 10:46:56
>>287
その理由を簡単にでも教えてください
0290デフォルトの名無しさん2007/12/03(月) 11:05:13
無いからつけなくてもいい
0291デフォルトの名無しさん2007/12/03(月) 11:05:44
気分
0292デフォルトの名無しさん2007/12/03(月) 11:07:22
どっちがいいなんて正解はない。
状況も聞かずに無条件につけるべきなんていう奴は知らない。
0293デフォルトの名無しさん2007/12/03(月) 11:10:19
拡張メソッドはthisつけないと呼び出せない
拡張メソッドと分けて見やすくする目的だとthisはつけないほうがいい
0294デフォルトの名無しさん2007/12/03(月) 12:11:12
this.を付けないならインスタンスメンバにはプレフィックスを付けることにしたほうがいいと思う
0295デフォルトの名無しさん2007/12/03(月) 12:47:46
m_とか? きめえ
プレフィックスはインテリセンスの利きを悪くするし可読性も落ちるだろ
0296デフォルトの名無しさん2007/12/03(月) 13:07:19
_だろ。
IronPythonのコードがそうなってる。
0297デフォルトの名無しさん2007/12/03(月) 13:21:21
MSの中でも_が多いみたいだよ
C++な人が多いからとか、VB.NETではつけないとプロパティ名と被りやすいから
それに合わせてるとかきっとそういうことだろうけど
0298デフォルトの名無しさん2007/12/03(月) 13:24:16
C#の話をしようぜ
どっちにしろインテリセンスの利きは悪くなる
可読性は_ならたいして落ちないだろうけど
C#の標準命名規則にはそんなんないのだ
0299デフォルトの名無しさん2007/12/03(月) 13:33:06
MS公式のガイドラインがあるのはアセンブリ外から見える名前についてだけだよ
0300デフォルトの名無しさん2007/12/03(月) 13:37:07
とりあえずprivateフィールドは小文字で始めますって書いてなかったか
0301デフォルトの名無しさん2007/12/03(月) 13:45:43
インテリセンスの危機が悪いってのはどういうこと?
0302デフォルトの名無しさん2007/12/03(月) 13:48:32
プレフィックスがあると一文字入力しても全然絞れない
0303デフォルトの名無しさん2007/12/03(月) 13:48:45
>>300
公式には無いよ
「C#コーディング標準」ではプリフィックス付けてもいいとされてるし、
大文字小文字を区別した名前を付けるなとあるから、それを守るんであれば
何か付けないとプロパティと被る
0304デフォルトの名無しさん2007/12/03(月) 14:05:51
あるwebサイトのデータを数秒間隔で取得してフォームに表示したいのですが
sleepで数秒寝かせて無限ループで取得という方法でいいんでしょうか?
0305デフォルトの名無しさん2007/12/03(月) 14:10:19
一定だと怪しまれるからランダムを入れた方がいいかもね
0306デフォルトの名無しさん2007/12/03(月) 14:11:52
>>305
でもその方法だとなぜか重すぎてキャンセルとか受け付けてくれないんですよ
0307デフォルトの名無しさん2007/12/03(月) 14:21:14
>>306
どうせ0秒から3秒くらいのランダムとかして平均1.5秒でアクセスしてるんだろう。
0308デフォルトの名無しさん2007/12/03(月) 14:39:13
つーかメインのスレッドでスリープしてるんだろうw
0309デフォルトの名無しさん2007/12/03(月) 14:47:29
>>308
mainのなかでwhile使って無限ループさせてるんでそうだと思います
guiのプログラミングって何が何だかわからない
0310デフォルトの名無しさん2007/12/03(月) 14:48:47
guiはメインが全部終了しないと動き出さない
0311デフォルトの名無しさん2007/12/03(月) 15:12:18
ジェネレートってどうゆう意味ですか?

教えてくださいお願いします。
0312デフォルトの名無しさん2007/12/03(月) 15:39:33
イタリア風のアイスだよ
0313デフォルトの名無しさん2007/12/03(月) 15:51:42
>>312

それはジェラート。
0314デフォルトの名無しさん2007/12/03(月) 16:19:29
string data = "M-SEARCH * HTTP/1.1\r\nMX: 3\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n\r\n"

もたいな文字列が在る場合。↓みたいな感じで表示するにはどうすれば良いですか?

M-SEARCH * HTTP/1.1\r\n
MX: 3\r\n
HOST: 239.255.255.250:1900\r\n
MAN: "ssdp:discover"\r\n
ST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n
\r\n
0315デフォルトの名無しさん2007/12/03(月) 16:25:33
\r\n→\\r\\n\r\n
0316デフォルトの名無しさん2007/12/03(月) 19:24:06
>>309
夢幻ループ化。

処理をWindowsに返さないといけないんです。
Windowsから仕事しロッテ言われてから動けばいいんです。
自分から動きたい場合は、そのタイミングで呼び出してもらえるように約束を取り付けておけばいいんです。
0317デフォルトの名無しさん2007/12/03(月) 21:27:09
>>309
GUI関係ないだろ・・・
Timer使え
0318デフォルトの名無しさん2007/12/03(月) 21:49:01
すいません質問です。
名前空間は、団体名. 技術名. 分野と記述するのが推奨だと始めて知ったのですが、
普通はこの形式で名前空間定義をしているのでしょうか?
0319デフォルトの名無しさん2007/12/03(月) 21:53:09
そうです。
0320デフォルトの名無しさん2007/12/03(月) 21:59:43
そうでもないよ。
0321デフォルトの名無しさん2007/12/03(月) 22:10:15
楽しいか?
しかし、どこのスレも下らん馴れ合いで嬉しくなっちゃう単細胞な馬鹿が多いな。
0322デフォルトの名無しさん2007/12/03(月) 22:19:57
アンマネージdllはdllimportで呼べるそうですが、これを使えばいちおう理論的には全てのdllを呼べる、というわけでもないんでしょうか?
ググるといろんなサイトや掲示板で、Cなどで作ったdllのimportに苦労してる人がけっこう見つかります。
でも、アドバイスしてる人も“難しい”とは言いますが“不可能”と言ってる人は見かけません。

理論的に不可能ではないが、非常に難しい場合もある、ということでしょうか?
0323デフォルトの名無しさん2007/12/03(月) 22:36:55
>>322
Cのdllなら基本的に難しいことはないと思うが・・・。
C++のクラスライブラリをインポートするのは不可能。
03243222007/12/04(火) 01:13:57
>>323
引数が構造体だったりすると大変にならないですか?
実は以前、他所様のCで書かれたdllを使おうと試みたんですが、
引数の構造体の中身が分からなくて断念したことがあります・・・
私の能力が至らないだけで、本当はできるんでしょうか?

>C++のクラスライブラリをインポートするのは不可能。
え、そうなんですか?すいません、どうして不可能なのか簡単に教えて頂けないでしょうか?
0325デフォルトの名無しさん2007/12/04(火) 01:24:16
C#のここで質問していいか迷うけど
C#でプログラミングしてるからここに。

TcpClient使ってネットワークストリームから出力すると
レスポンスヘッダと内容自体がいっしょくたになるけど
これをレスポンスヘッダと内容を効率よく分解する方法ってない?
TcpClient以外を使うっていうのは無しで。
0326デフォルトの名無しさん2007/12/04(火) 01:29:44
>>324
C++のABIは標準化されてないから
0327デフォルトの名無しさん2007/12/04(火) 02:19:00
>>324
構造体なんて定義すればいいだけだよ
C同士だって構造体の中身がわからなければ何もできないでしょ
03283222007/12/04(火) 02:51:26
>>326
アンマネージなC++クラスライブラリだと駄目ってことでしょうか?
やるとしたら、マネージなのに作り直すか、クラスを使わないようにする、という認識で合ってますか
0329デフォルトの名無しさん2007/12/04(火) 02:55:37
あってる
もちろんクラスをマネージコードとやりとりしなければいいのであって、DLL内だけで使用する分には問題ないよ。
0330デフォルトの名無しさん2007/12/04(火) 03:14:46
C++/CLIでラップすればいいんじゃねえの
0331デフォルトの名無しさん2007/12/04(火) 04:49:49
C++クラスのDLLをC#から直接呼び出すのは、
DllImportのCallingConvention.ThisCallを使えばできるが、
ファクトリや開放用のメソッドが必要になったりで
正直おすすめしない。
03323222007/12/04(火) 06:09:38
>>327
いや、中身が分からないんです。非公開というか勝手に使ってるだけなので。
で、もう一度トライしてみたらできました!朝までかかってしまいましたが・・・
dll内の関数の引数や返り血が構造体のポインタなのですが、C#のほうで適当に
 struct hoge{};
と空っぽの構造体を作ってしまいました。とりあえず正常に動きました!(´∀`)ヤッター
でも、何故これで動くのかあんまりよく分かってないのですが、このまま使って大丈夫でしょうか??
unsafeでやってるので少し不安です・・・

>>329
探したら↓などを見つけました。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20010&forum=7
COMを使えばクラスライブラリも呼べるようですが、茨の道みたいですね

>>330
無理してコードを変えるより、そのままC++/CLIでラップするほうが楽だし安全、ということでしょうか。
・・・というか、これ使えば何でもできるんじゃ?もしかして相当すごい機能?

>>331
すいません、まだそういうことできるレベルじゃないです。。


もう寝ます。皆様お付きあい頂いて、ありがとうございました。
0333デフォルトの名無しさん2007/12/04(火) 10:47:07
フォーム上のボタンを押したらMonthCalendarコントロールが表示するようにしたいのですが、
このMonthCalendarコントロールを表示した際にフォーム内からはみ出た部分が表示され
ないのですが、回避するにはどうしたらよいのでしょうか?
0334デフォルトの名無しさん2007/12/04(火) 11:39:04
別のフォームに作れば
0335デフォルトの名無しさん2007/12/04(火) 12:18:46
フォームにラベルを複数置いたのですが
これらを配列として扱うには下記の方法でよろしいでしょうか?
label1〜label4がフォームに置いたラベルです

Label[] lblArr = new Label[4];
lblArr[0] = label1;
lblArr[1] = label2;
lblArr[2] = label3;
lblArr[3] = label4;

考え方がよくなかったりしたら教えてください
0336デフォルトの名無しさん2007/12/04(火) 12:33:27
>>333
あらかじめ貼っておくか、追加するときに場所と大きさ計算してフォームのサイズを調整したら

>>335
いいよ
Label[] lblArr = new Label[]{ label1, label2, label3, label4 };
でもいい


03373352007/12/04(火) 13:15:21
>>336
数が少ないなら宣言時に入れたほうがすっきりするんですね
そうするようにします。

ありがとうございました。
0338デフォルトの名無しさん2007/12/04(火) 13:34:32
for(int i=0;i<4;i++){lblArr[i]=(Label)this.Controls["label"+i];}
一応こういうのもある
>>335-336の方が好ましいのでできればやめた方がいいけど
0339デフォルトの名無しさん2007/12/04(火) 15:05:32
コンソールアプリなのですが、キーボードステータスを読み取るにはどうすればよいのでしょうか。
03403392007/12/04(火) 15:10:04
(続き)
タイマーイベントのハンドラの中で、現在押下されているキーをすべて取得するといった内容で考えております。
0341デフォルトの名無しさん2007/12/04(火) 15:13:29
いつもお世話になっております。ご相談させてください。

UDPポートをbindして、クライアントから一方的にudpデータが
送られてくる状況で、パケットの取りこぼしが発生してしまいます。

クライアントから送られてくるデータの、先頭2バイトをインクリメントデータの
シーケンス番号としておりまして、これを連続して取り出したところ
最大で10パケットほどごっそり抜けるといった現象が発生しています。

以下がプログラムの流れです。

1.ソケット作成
2.Socket.BeginReceiveFrom〜で非同期受信開始
3.コールバックメソッドで、先頭2バイトを読み出してシーケンス番号を確認。
4. 3.のシーケンス番号を保存して、再びSocket.BeginReceiveFrom〜を呼び出し。
5.再度のコールバックメソッドで、4.で保存したシーケンス番号と
 新しいシーケンス番号に2以上の差があるときがある。(おおよそ2〜10程度)

UDP自体は信頼性のないネットワークなのは十分承知しているのですが、
クライアントからのデータはCore2DuoのPCでデータを受信しているので、
CPUパワーからして本当に取りこぼすのか疑問に思っております。

Wiresharkでパケットをキャプチャするとネットワークライン上には
正しくデータは流れているので、Windowsは取りこぼしていないが、
アプリケーションの段階で取りこぼしているのかなと想像はしているのですが……。

どなたか同じような症状の方おりませんでしょうか。
またわかる方がいればご教示願えませんでしょうか。

orz

0342デフォルトの名無しさん2007/12/04(火) 15:19:06
>>341
1パケットに複数まとまってるんでない?
0343デフォルトの名無しさん2007/12/04(火) 15:20:32
初歩的な質問ですみません。
C#の文法規則の意味について教えてください。

C++は理解しており、メンバーに対するアクセス指定は理解できるのですが
クラスに対するアクセス指定の意味がわかりません。

名前空間内でクラス宣言を行うときにクラス自体にpublicかinternalの
アクセス指定ができますが、これらは何を意味するのでしょうか?

理解していること
・名前空間内で指定可能なアクセス指定子はpublicかinternalのみ
・省略するとinternalとなる

0344デフォルトの名無しさん2007/12/04(火) 15:26:07
>>340
GetAsyncKeyState()等のAPI 使うとかでどうか
0345デフォルトの名無しさん2007/12/04(火) 15:29:00
>>343
http://msdn2.microsoft.com/ja-jp/library/ba0a1yw2(VS.80).aspx
03463392007/12/04(火) 16:02:59
>>344
ビンゴでした。THANKS!
http://www.cam.hi-ho.ne.jp/oishi/tips.html#keystate
を参考に、GetKeyStateで出来ました。

[DllImport("user32.dll")]
private extern static Int16 GetKeyState(VirtualKeyStates nVirtKey);

private enum VirtualKeyStates : int
{
VK_LBUTTON = 0x01,
VK_RBUTTON = 0x02,
}

public void OnTimedEvent(Object sender, ElapsedEventArgs e)
{
bool fLeftPressed = (GetKeyState(VirtualKeyStates.VK_LEFT) & 0x8000) != 0;
bool fRightPressed = (GetKeyState(VirtualKeyStates.VK_RIGHT) & 0x8000) != 0;
}

03473392007/12/04(火) 16:16:20
おっと失礼
private enum VirtualKeyStates : int
{
VK_LEFT = 0x25,
VK_RIGHT = 0x27,
}
必要な定義はこちらでした。
0348デフォルトの名無しさん2007/12/04(火) 16:51:16
>>345
ありがとうございます。

『public と宣言された型には、他のすべての型がアクセスできます。
internal と宣言された型には、同じアセンブリに所属する型だけが
アクセスできます。』

とあるのですが、ここでいうアセンブリとはソースファイルという理解
で正しいでしょうか?
03493482007/12/04(火) 16:55:18
アセンブリとはDLLやEXEのことでした。

ということは、internal指定のクラスの場合は同一DLL, EXE
からしか参照できなくて、public指定のクラスの場合は
別のDLLやEXEから参照できるということですね。
0350デフォルトの名無しさん2007/12/04(火) 16:57:51
おおかた合ってる。
0351デフォルトの名無しさん2007/12/04(火) 16:59:18
>>346
Keysつかえよ。
0352デフォルトの名無しさん2007/12/04(火) 22:38:31
P/Invokeでは[DllImport("kernel32.dll")]などと指定しますが、
kernel32.dllやuser32.dllなどといったものは64ビットWindowsにも存在するのでしょうか?
またこれらに64ビットポインタを渡しても問題ないのでしょうか?

手元に64ビット環境がないので、よろしくお願いします。
0353デフォルトの名無しさん2007/12/04(火) 22:46:18
存在する
64bitのAPIも同名DLL
WoW64で動くかどうかでどっちを使うか自動判断
明示したけりゃ/platform
0354デフォルトの名無しさん2007/12/04(火) 23:03:46
>>353
どうもありがとうございます。
特別な理由がなければ何も考えずに書けばいいんですね。

もう一つ質問があるのですが、32用と64ビット用の二つのdllがある場合、
P/Invokeで実行環境に適したdllを読み込むことはできますか?
0355デフォルトの名無しさん2007/12/04(火) 23:22:37
>>354
>>353のレスちゃんと読んでやれよ・・・
03563522007/12/04(火) 23:38:07
>>355
どういうことです?
WOW64上で動作させて32ビット用を読み込めということですか?

ちなみにこの場合のdllはシステムにあるものではなく、自作のdllという意味です。
0357デフォルトの名無しさん2007/12/04(火) 23:40:21
IntPtr.Sizeみて分岐
0358デフォルトの名無しさん2007/12/04(火) 23:46:04
自動判断って書いてあるように見えるけど?
0359デフォルトの名無しさん2007/12/04(火) 23:49:07
system32/syswow64に入らないのなら自動呼び分けはないんじゃないかな
シングルトンで実装させれば使う側は気にしなくてすむようになるけど
DLL検索パスを利用してうまいことやればdll名だけ違うDllImportとか書かなくてもなんとかなるかな
0360デフォルトの名無しさん2007/12/04(火) 23:53:10
ま、正しいのはやはり/platformでターゲットを明示すること
■ このスレッドは過去ログ倉庫に格納されています