1 :
デフォルトの名無しさん :
2010/02/04(木) 20:32:55
A4 - ISO 216 用紙サイズ(210mm×297mm) これと [PaperSize A4 Kind=A4 Height=1169 Width=827] これの関係は 1169/100*2.54=29.6926cm ということなので {X=13.33333,Y=11.66667,Width=800,Height=1137.667} これのX=13.33333も 13.33333/100*2.54=0.338666582cm まあ5mmじゃなく3mm程度ずれてる計算? プリンターが古かったりすると多少ずれるかもしれないし
3 :
1 :2010/02/04(木) 20:34:07
スレタイ間違いました・・・orz
ふらっと覗いてみた笑
>>2 ありがとうございます。
全ての謎がとけました。^^
今まで逆引きの本一冊でいってたんですけど、座学でもいけるように
全機能の入った本を買ってきたところです。
あっちのスレと番号までかぶってる…
>>8 あっちは実質56らしいよ
でももう終わりかけてるんだよなw
ややこしいw
間違いだらけヒドス
このカオスはどうしてくれようか 向こうと新スレ交換しようにもあっちはあと何週間かは持つだろうからなー
12 :
デフォルトの名無しさん :2010/02/04(木) 21:20:36
ああ、先に提案するかさっさと処分するかだな>このスレを p2重い どこか別のp2のようなサービスないのかな・・・
今の本スレが終わるまでここが残ってればここを次の本スレとしてリユースって形でおk?
まあ正直55が3スレあっても気にならないんだけどな どうせdat落ちしたら基本見れないんだから55スレのxxx見ろとか言わないし
17 :
デフォルトの名無しさん :2010/02/05(金) 00:32:36
初めて質問します。 コンソールからの入力で2つの整数を取得したいのですが、 下記のように、2行に渡って取得する他ないのでしょうか? Console.WriteLine("何行何列ですか?"); int row = Convert.ToInt32(Console.ReadLine()); int col = Convert.ToInt32(Console.ReadLine()); 私としては、ユーザーに2,3のように1行で入力してもらって、 そんなことは可能でしょうか? どなたかご教示お願いします。
この分だとこのスレが3つ目のpart55になるわけか いや、よく見たら1つ死んでるから4つ目だしw
20 :
デフォルトの名無しさん :2010/02/05(金) 05:24:36
C#人気あるなあ
このスレ、削除依頼(重複)出しているの?
22 :
デフォルトの名無しさん :2010/02/05(金) 12:18:58
どなたか17番の回答お願いします。。
回答は俺の十八番だ
終わた(´;ω;`) 住谷 正樹 様 お客様の証拠金維持率が当社外国為替証拠金取引規約の基準 であるロスカットライン100%を下回ったため、下記全ての ポジションを反対売買により決済(ロスカット)致しました。 決済の結果詳細は【DMM FX】お取引画面にてご確認ください。
レイザーラモンHG乙
27 :
デフォルトの名無しさん :2010/02/05(金) 13:17:19
たとえば 10,11 と入力させて ,で区切るとか で前の文字列と後ろの文字列をそれぞれConvert.ToInt32でもやってみる チェックが面倒ならtryでエラーを拾えばいいし
(?<row>[0-9]+),(?<col>[0-9]+)のような正規表現でキャプチャするのが楽
29 :
デフォルトの名無しさん :2010/02/05(金) 18:23:19
素直にトークン分割汁
例が単純だから正規表現使わなくても十分だけど
正規表現が少しでも分かってれば
>>28 はすぐ浮かぶだろ
じゅう, じゅういち さぁ!
10、11 ユーザー様は全角英数字で入力するのだ
最近のIME様は賢いので10,11と英数字の後は全角カンマになさったりするものだ
じゃあ、とりあえずNFKCで
38 :
デフォルトの名無しさん :2010/02/05(金) 23:44:59
寝ますよ?
でも正規表現だとマルチバイト文字が入力されたら うまく行かない気がする・・・
十、十一
41 :
デフォルトの名無しさん :2010/02/06(土) 04:17:41
大変ですね
private void Page_Load(object sender, System.EventArgs e)
{
// string seperated by colons ';'
string info = "mark;smith;123 csharp drive;toronto;canada";
string[] arInfo = new string[4];
// define which character is seperating fields
char[] splitter1 = {';'};
char[] splitter2 = {','};
char[] splitter3 = {'、'};
char[] splitter4 = {','};
info = info.Split(splitter1);
info = info.Split(splitter2);
info = info.Split(splitter3);
info = info.Split(splitter4);
for(int x = 0; x < arInfo.Length; x++)
{
Response.Write(arInfo[x] + "<br>");
}
}
http://www.csharpfriends.com/articles/getarticle.aspx?articleid=28 起きてから考えてみるも良いコード思いつかず
うん、でも当然動かないorz
とりあえずジェネリックとforeachでも覚えて、 splitter4とか作らないようにしてくれ
44 :
デフォルトの名無しさん :2010/02/06(土) 12:21:42
大変ですね
>>43 それより先のことが山盛りあるとおもうの。
C#にenumってねーの?
ないよ
ない可能性は限りなく零に近い
49 :
デフォルトの名無しさん :2010/02/06(土) 15:51:27
零に近い根拠を示しなさい さあ示すのです!
元に戻して申し訳ないけど 上にある正規表現は負の整数拾ってないよな 残念だけど…
何行何列かを取得するのに負の整数の考慮はいらんだろ
考慮するにしたって[+-]付けるだけじゃん そういう柔軟性は大きな強み
53 :
デフォルトの名無しさん :2010/02/07(日) 01:02:13
強みですね
54 :
デフォルトの名無しさん :2010/02/07(日) 01:33:29
55 :
デフォルトの名無しさん :2010/02/08(月) 19:26:53
過疎
56 :
デフォルトの名無しさん :2010/02/09(火) 02:54:07
VS2010のテキストエディタはWPFだよ 軽くはないけどそんなに遅くもない
955 名前:デフォルトの名無しさん[sage] 投稿日:2010/02/08(月) 20:14:14 VS2010のテキストエディタはWPFだよ 軽くはないけどそんなに遅くもない
58 :
デフォルトの名無しさん :2010/02/09(火) 12:32:13
----------------------------------------------------------
C#, C♯, C#相談室 実質Part57
前スレ(実質Part56)が埋まりましたのでここを有効利用いたします。
では本来の
>>1-4 くらい
----------------------------------------------------------
59 :
デフォルトの名無しさん :2010/02/09(火) 12:33:13
DataOutputStreamで00 00 10 88だった、big-endianか
質問です。 IListを実装しない(LinkedList<T>とか)コレクションの変更通知って、 どうすればいいんでしょうか?
? ObservableCollection<>の話じゃなくて?
IListにも変更通知用のイベントなんて無いな
INotifyCollectionChangedで通知するにも、IListじゃないとそもそもインデックスがないよなー と悩んでいたんですが、そのままObservableCollection<T>に渡せばよかったんですね。 というか色々と説明不足・下手ですみませんでした。
70 :
デフォルトの名無しさん :2010/02/09(火) 23:49:42
>>69 Javaはこう出力しますって E1 82 88 E1 を持ってきたんだろ
それに質問者本人が int の下位だけなんですよね〜とか言ってるんだから
へ〜Javaってそんな独自の埋め込みするんだ〜 C#じゃあ知ったことじゃねーなってところだろw
UTF-8を知ってないと解読できないし、あえてそこまでこのスレの住人が対応することじゃないだろ
E1ってその後にもついてたんか。よく見てなかった。すまん。
72 :
デフォルトの名無しさん :2010/02/10(水) 01:13:06
Java屋からの乗り換えなんですが、 C#(.Net3.5)でO/Rマッパー使うとしたらなにがおすすめですか。 (1) 使わない (2) LINQ (3) S2Dao.Net (4) NHibernate (5) その他 JavaではHibernate使って、その後 S2 採用してました。 C#歴は既設アプリ改造を手伝ったぐらいであんまり本格的にはやってないです。 ラクちんかつ綺麗、COC(convention over config)が好みなんですが、 C#のお作法を無視して、無知ゆえのしっぺ返しをくらうなどないかなーなど 心配しており、みなさまのお知恵を拝借したいです。
Linq to SQLとLinq to Entitiyは今のところSQL Serverしかまともに対応してない。 他のDBMSを使いたいなら3か4になる。
74 :
デフォルトの名無しさん :2010/02/10(水) 01:55:45
やぶんサンクスです。 いちお SQL Server 採用予定なんだけど > 73 サンなら何使う?
SQL ServerならLINQ to SQLが一番楽 単純な構成ならテーブル/ビューをD&Dするだけでほぼそのまま使える LINQ to Entitiesの方は自動生成の名前とデザイナの操作性に難あり
76 :
デフォルトの名無しさん :2010/02/10(水) 02:36:51
>75 ありがとう!
LINQ to SQLは将来性が怪しそうなので手をつけるのを躊躇してしまう
ツールが違うだけでやることは似たようなもんじゃね?
linqは流行らないだろうな
80 :
デフォルトの名無しさん :2010/02/10(水) 09:51:29
Form.Opacity=0.5とかで透かしたた上で 文字などは透かしたくない場合はどうやればいいですか?
81 :
デフォルトの名無しさん :2010/02/10(水) 09:53:13
できないはず やるならBackColorにFromArgbとかで半透明を与えるか 背景画像を動的に作ってそいつに半透明を与えるかしないと
ごめんフォームのバックカラーに半透明は無理だな
83 :
デフォルトの名無しさん :2010/02/10(水) 10:41:30
どうも無理っぽいですね。 Formを2個表示して formAをOpacityで半分透かして formBのBackColor = White formBのTransparencyKey = White で2個のフォームを重ねて表示することで実現できそうです・・・・ 無理やりですが。 他にいい方法があったら教えてください。
84 :
デフォルトの名無しさん :2010/02/10(水) 10:42:41
formBに文字や図形など描画すると所望の動作をするようになりました。
うーむ 透明色をグラデーションした画像を当てはめてみたが どうも完全な透明とそれ以外としか扱ってくれないねえ やり方はあるのかもしれないけど
87 :
84 :2010/02/10(水) 11:17:22
88 :
デフォルトの名無しさん :2010/02/10(水) 11:19:11
>>87 なるほど
師匠ですか・・・
じゃなくて
まあフォーム2枚を連動させたりとめんどくさいですけどとりあえずそれでw
全部オーナードローするならレイヤードウィンドウって手も
WPFだったら楽なのに
ウィンドウそのものを透明にするのはWPFの範囲外だぞ
93 :
デフォルトの名無しさん :2010/02/10(水) 20:09:51
>>92 .net側が使わないだけなのか
最近のGPUだと2D部分も結局は3D部分でやってるとかあったので
できないはずは無いと思ってたんだが
>>79 あのクエリ式はともかく、Enumerableクラスのメソッド群は有用だよ。
>>94 流行らないっていってんだろw
俺に逆らうなw
C#のSMTP認証メール送信機能を使う機能を作りたいんだけど どうしてもSMTP認証が失敗するw 使ってるのはSystem.Net.Mail.SmtpClient その他情報 失敗時のSmtpStatusCode:GeneralFailure smtpサーバー:会社のsmtpサーバー ポート:サブミッションポート(587) techbank.jpにSmtpClientのサブミッションポートは 認証上手く行かない事がある、System.Web.Mail.SmtpMai なら上手く行く、ってかいてあったのでこっちもテストプログラム 作ってみたら確かに認証通ってメール送信できた。。 何とかならないだろうか・・・
>w などと不真面目な奴には教えない
98 :
96 :2010/02/10(水) 23:52:15
>>97 それは大変失礼しました
結構真面目に悩んでいるので何かおわかりなら
教えて下さい
>結構真面目に ふざけるのもいい加減にしろ!
101 :
96 :2010/02/11(木) 00:02:45
ほっとけよ
ほっとけーきよ
hotkey
ほーほけきょ
知らぬなら 教えてあげよう ホトトギス
>96 うちは587でもSystem.Net.Mail.SmtpClientは正常に動作してる 書いてるコードも晒さないで何とかしてもらおうというのがまず無理だと思う つぶやいてみたかっただけならtwitterへどうぞ
>>107 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
IsErrorがtrueのObsolete属性が付いたメンバを使おうとしたときに出るコンパイルエラーを回避する方法はありますか?
112 :
96 :2010/02/11(木) 11:51:58
>>107 すまん。晒すわ
本当サンプル程度で申し訳ないが
昨日もあれからやってみたが会社のメールサーバーは
認証不可。GeneralFailure。25番はポート自体閉じてるので
どうにもならない
自宅のBiglobeは587番ポートだとメールボックス使用不可
25だと正常にメール送信できる
113 :
96 :2010/02/11(木) 11:54:26
using System.Net; using System.Net.Mail; (略) public void SendMail(string from, string to, string subject, string body) { MailMessage message = null; SmtpClient client = null; try { message = new MailMessage(from, to, subject, body); client = new SmtpClient(); client.Host = "(smtpサーバーアドレス)"; client.Port = 587; client.Credentials = new NetworkCredential("認証ユーザー名", "パスワード"); client.Send(message); } catch (SmtpException ex) { SmtpStatusCode code = ex.StatusCode; } finally { message.Dispose(); } } (略)
114 :
96 :2010/02/11(木) 11:57:36
EnableSslやTimeoutも明示してみたりしたが特に 効果はなかった。何かわかればお願いします
.NETのやつと、うまく行くメーラーで、パケット取って見てみればいいじゃん。
どこでエラー吐くのかわからんのだが エラーなしで通信だけできないの?
>>115 ,116
client.Send(message);
まで普通に動いてしばらくしたらcatchに流れてくる
しばらくって言っても10秒も経たないかな
パケットキャプチャか・・・。それはまだやってなかった
検討してみる。ありがとう
SMTPサーバは生きてるけど 587ポートが通信拒否状態なだけだったらワロス
>>118 会社もBiglobeもメーラーなら587番ポートでも
上手く行くんだが・・・
そもそもメールサーバー側の設定とかに詳しくないので
その辺も調査・勉強してみる。ありがとう
>>108 レスはしてくれるけど答が返ってくる保証はないんだよなぁ
>>119 GeneralFailure トランザクションを発行できませんでした。指定した SMTP ホストが
見つからない場合にこのエラーが発生します。
本当にGeneralFailureがきてるなら、認証以前の問題じゃないのか
>>120 そもそも
>>1 は無効
>>121 そうなんだよね。認証不可ってのは例外Messageが
「認証に失敗しました」ってなっているだけの話
MSDNで仕様みるとご指摘通りで、確かにそれはあると
思ってる。ただ、メーラーで設定して成功しているサーバー名
とユーザー名、パスワードで間違いなく設定してるんだが・・・
比較用に自宅のBiglobeでやったら587だとメールボックス使用不可だし・・・
25ならOKだけど
設定周りの確認&パケットキャプチャから地道にやってみる
ありがとう
25で通るなら25でいいような…587じゃないダメってのは仕様なの?
>>123 25ならOKなのはBIGLOBEで会社は25でも駄目
特定顧客ならそれでも良いかもしれないけど、複数顧客向けの
システムで、機能が導入できるかどうかの技術調査中なんだ
実際自分の会社も25番ポート閉じてるし、そういう顧客が
いると想定される時点で「587番ポートについては環境次第で
メール送信出来ないかもしれません」って仕様では苦しい。。
えーとさーばせっていをおこなわずにあぷりけーしょんのみでつうしんしたいのですか?
そろそろうざーい。
128 :
107 :2010/02/11(木) 23:26:58
>122 うちの環境だけど、メールサーバーがLinuxでPostfix使ってる んでクライアント側はWebサービス(asmx)使って投げてるから参考なるかわからんが public bool sendMail(string fromAddress, string toAddress, string subject, string body) {try{ MailMessage message = new MailMessage(); message.From = new MailAddress(fromAddress); message.To.Add(new MailAddress(toAddress)); message.Subject = subject; message.Body = body; message.IsBodyHtml = false; SmtpClient smtpClient = new SmtpClient(); smtpClient.EnableSsl = false; smtpClient.Send(message); return true; } catch (Exception ex) {略} } NetworkCredential使わないでWeb.configに <system.net><mailSettings><smtp> <network host="SMTPサーバー" port="587" userName="認証ユーザー名" password="パスワード"/> </smtp></mailSettings></system.net> で送れてるよ 俺もサンプルというか基本的なことしかやってないのにエラそうなこと書いてスマン
自分の環境でできない=不特定多数の環境では使い物にならない でFA
とりあえず結論から言うと、使っているMTAがゴミである可能性が高い。 AUTH-LOGINには明確な規格がないが、デファクトスタンダードではクライアントが送るデータは2パターン。 もし、SmtpClientが送っている方のパターンにMTAが対応していなければ、エラーとなるのは必至。
エラーとなるのは必至ですね。
加算代入されたdelegateをまとめて実行した時、それぞれの戻り値を得る方法はどうすればいいの?
Delegate.GetInvocationListでバラバラにしてから呼び出す マルチキャストは基本的にイベント専用の機能なので戻り値が必要なら普通にコレクションに入れた方がいい
[画面のプロパティ] → [詳細]タブ → [ディスプレイ]を選ぶ → [Windows デスクトップをこのモニタ上で移動できるようにする] のチェックボックスを切り替える相当のことって可能でしょうか?
うん!
こ
ちょっとマルチスレッド化の速度について質問なんだけれど… 今ThreadPoolと、複数スレッドにQueueで仕事を分配する処理を競争させてるんだけど (ようするに自前ThreadPool。ただ、まだ複数スレッドを作ってそれぞれが共通のQueueからデリゲートを取ってくるだけの簡単なもの) どうやっても.Net製のThreadPoolに勝てないんだが理由が分からない。とりあえず試したQueueの種類としては クリティカルセクションを使った割と定番のブロックするキュー ロックフリーキュー スレッド専用キュー 一応条件次第では勝てるんだけど、その条件がキューにデリゲート10000個とか極端な場合なんでなんとも (キューとのやり取りは自前のほうが早い?) キューのロック以外で思いつくのは、ThreadがSystemアセンブリ内なんで、 アセンブリ超えるオーバーヘッド?ぐらい ThreadPoolは確かSystemアセンブリだったと思うんで 超えなくてすむから?とか不確定なもの 環境はOS WindowsVista CPU Intel Core2Quead 2.40GHz 2.39GHz テストの仕方はMath.Sqrt()を一定回数ループするデリゲートを一定個 思いっきり車輪の再発明で愚の骨頂だと思うんだが、ちょっと気になったので 一応、キューにデリゲートが少ない場合は全部のやりかたでマルチスレッド化したほうが早くはなってる 自前 1.7倍程度 専用キューと.NetのThreadPoolが2.7倍程度 専用キューと.NetのThreadPoolが互角なのが解せぬ
139 :
138 :2010/02/14(日) 04:42:41
Core2Queadってなんだ Quad ですorz
sscli読んでみたら? ちょっと見てみたけどThradPoolはネイティブメソッドのラッパーだね
.netはソース見てみるのが一番いい 誰でもダウンロードできるんだし
うん
すいません。とりあえずのテストなんでスレッド終了を待機する時whileループで待機していたんですが、
これメインスレッドさぼってると気づいてメインスレッドにも仕事させたらThreadPoolに追いつきましたorz
あと、計測結果を見やすくしたら2.7倍どころではなく3.7倍程度でしたorz
自前の実装も3.7倍程度と大体期待通りになりました。
やはり駄目なのは自分だった…
>>139 >>140 はい。とりあえずネイティブメソッドを呼んでいるところまでは追いかけたんですが、
もうちょっと見てみます。ありがとうございます。
更新してなかった
>>145 はい。ソースコードは既に手元にあります。
ですが、ありがとうございます。
単に一つのハッシュ計算に一つのスレッドを使ってるだけ。 その手のソフトなら10分もあれば誰でも作れるよ。
アプリケーション終了時に とある実例(インスタンス)の破棄処理(Dispose)を走らせたいんだけど Mainのあるところでusingステートメント使えばいいの?
ファイナライザ書いとけば? ファイナライザが呼ばれずに終了してしまうような状況では usingによるDisposeもfinallyも呼ばれる保証はない CriticalFinalizerObject使えばより確実
自分のクラスで直接抱えてるアンマネージリソースを開放したりするのはいいが ファイナライザの中で他のオブジェクトのDisposeを呼んだらダメだぞ あとファイナライザを書くと確実にGCのパフォーマンスが落ちるのでどうしても必要な場合だけ
というかよく見たらApplication.Exit()しても終了してないみたいだ。 なんだこれ。
調べたら別スレッドがあるとApplication.Exit()でも終了しないみたいだけど グローバルフックもこれに含まれるの?
自己解決しました。
Application.ExitはApplication.Runを抜けるだけ
SystemExplorer見ると初回起動後以外はExitしてもプロセスが死なないんだけどどうして?
動かしたまま放置するようなスレッドは .IsBackground = true
FormClosingでe.Cancel = trueしてただけでした^^; お騒がせして申し訳ありませんでした^^;;
しねよ(´・ω・`)
>>149 少し考えてみただけでいくつも疑念がわいてくるから、
ホントかよって思ってざっと見てみたが、だいぶ違うじゃねーかよ。
そりゃ大枠でマルチスレッド化してるってのは違いないが。
自信満々書いてるからなんか知ってんのか調べたのかと思ったが、
てきとーに言ってみただけかよ。
まあでも逆アセのコードは読むにはしんどいから、
誰でも10分でできるってんなら見本を書いて見せてほしいけどな。
ファイル読んで計算するとこだけでいいから。
一般的なマルチスレッド対応についての話なんだから、適当に一般論を答える のが筋だろフツー。何を期待して熱くなってるんだか。 調べてみたら特殊な事してるって分かったなら、はよ報告しろや。
つーか、2ちゃんに何を期待してんだよ、って話。
自己解決しました。
171 :
デフォルトの名無しさん :2010/02/15(月) 00:12:38
>>162 リフレクションしてみたら
>>149 の言うとおりでした
ほんとうにありがとうございました
作者乙
> リフレクションする ってなんだよ 鏡でも見てんのか
173 :
デフォルトの名無しさん :2010/02/15(月) 00:18:03
どっちやねん
え?
気にすんな ただの誤爆だ
真面目に聞くけど >単に一つのハッシュ計算に一つのスレッドを使ってるだけ。 の場合、ファイルの読み込み部分はどうなるんだ?
※複数ファイルを同時に計算することはできません。あくまで1つのファイルを対象に計算するためのツールです。 なんだから、読み込み部分はひとつだろ。
いや、そのひとつの読み込みとハッシュ毎の計算スレッドの連携って言うか。
>>178 readに特化したコストの低いロック手法があってだな・・・
その後にスレッド毎にメモリにロードしてだな・・・
そういうこった
そうだろうねぇ
質問ですが
C#でDMM.COMで使われているようなexeの中に画像を埋め込んだアプリケーション
作れるんでしょうか?試しにVS2008で画像をビルドをリソースに埋め込んだものをEXEで
書き出してリフレクターで見てみたら画像丸見えでした。
難読化ツール Spices.NET 5Jみたいなものを使って画像見られなくするのは可能でしょうか?認証とかphpとかにIDとPASSを投げて承認させることはできますが他に何が必要なんでしょうか?
http://www.newtone.co.jp/productsn500.html
>>183 方法はいろいろあるけど完璧はないよ
それにソースの難読化は関係ないんじゃないかな?
画像を暗号化などする場合はその戻しロジックを難読化させるくらいか・・・
暗号化速度を気にするなら簡単な方法としては 画像ファイルの先頭何バイトかを特定のアルゴリズムで書き換える。その後exeに内蔵 表示の際はexe内部のデータの書き換えた部分を復元して表示 とかかな ファイルを一定バイト単位をブロックとして並び替えするとかでもいいかも
単純に最初16バイトぐらいをビット反転させるだけでも…
定番のxorでいいよ
Read-Write Lock?
XmlDocumentで名前空間のprefixを指定せずにXPATHを使いたいのですが、 そのためにXmlDocumentからxmlnsを削除しようかと考えています。 設定できるプロパティがないようなので、一度文字列に変換して xmlns属性を消してXmlDocumentに読み直すという方法を とるつもりなのですがこれはまずいでしょうか?
removechildとかなかったっけ?
removeattributeとかなかったっけ?
名前空間を無視すること自体が間違ってるので それでもやるんだったらその手段の良い悪いなんか意味がないだろ
>>193 xmlnsはXmlNode.Attributesに含まれてないっぽくて。
>>194 HTML(SgmlReaderでXML変換)とXHTMLのXPATHを共通化したいのです。
XmlNamespaceManager使って何とかできるのかしらん。
気ままにリフレクションって歌が昔あったような.... 確か焼きそばUFOのCMソングだったような
おいジジイ くたばれよクソ面白くねえんだよ
わからないなら教えて下さいだろ? あっ?
分からないので教えてください。
んあっ・・・
んっ・・・
そう、そこをもっと、、うん、、、いい感じっ///
つまんねーよおっさん
ヘ:::::::::;;: -‐''''""( )1 ゙、::::::::-‐''""" ̄"'i :V;;||:::: '~ニ=ッ, r='| ショカツリョウ i!f !::::: ゙、i 諸葛亮曰く i!ゝ!:::: ‐/リ i::/:、 :::、 /''ii'V 「他にすることは無いのですか?」  ̄ハ:::::\ "''il|バ'
なぜおっさんと分かった
なんか
>>149 みたいに単純にスレッド分けてやろうとしたが、なんか結構難しいぞorz
まだバグ持ちの状態で無理やり動かしたが、パフォーマンスは微妙。
コア数以下のハッシュ同時計算なら同等になるが、
コア数以上で計算負荷に偏りがあると負ける。
進捗表示も何もしてないのに…
やる気がなくなってきた。
スレッドプール使ったら多分もっと簡単にできそうだが。
>コア数以上で計算負荷に偏りがあると負ける。 間違えた、コア数を超える同時計算ね。
ProducerConsumerパターン使って論理コアと同等数のスレッド数で回すだけじゃん 何が難しいのかさっぱりわからん
じゃあやってみてくれよ。
いやまあそりゃ、俺が未熟なだけだけどね。 でも単純にProducerConsumerとはちょっと違うような気がするけど。
何でProducerConsumer使うかわからないんだな 話にならん 一からやりなおせ
だって普通のProducerConsumerと違うじゃん。 一つのデータを全スレッドがそれぞれで処理するんだから。
論理コアと同等数のスレッドってのがみえんのかいな パフォーマンス云々いうわりには論点がわかってないんじゃな 出直せ
それじゃ
>>149 と違うじゃん。
元々そこに突っ込みたくてそれぞれスレッドにしてやったんだけど。
まあいいけどね。
それで論理コアと同等数のスレッドでやる場合はどうなるわけ?
どういう風にそれぞれのハッシュ計算に処理を割り当てるの?
例えばスレッド数2で計算するハッシュが3個の場合、
2スレッドをどういう風に3つの計算に割り当てるの?
まあ割り当ては分かるにしてもそれを実装するの結構面倒なんだが、
何が難しいかわからんくらい簡単なの?
いや簡単かもしれんがそれなら見せてくれ・
計算するハッシュ数は未定
論理コアが48コアある環境もある
だから
>>149 と違う事にはならんね
定義が曖昧だからな
割り当てに使うパターンがProducerConsumerパターンだろうが
その辺にごまんと散らばってるパターンを難しいとか、マジで勘弁してくれよ
217 :
デフォルトの名無しさん :2010/02/16(火) 22:37:55
僕はすぐにわかったよ。 うん、この場合はProducerConsumerパターンだよ!
まあ、スレッドプール使うと簡単になるけどね。
パターンが難しいんじゃなくて、今回のケースで実装が面倒って言ってるの。
>だから
>>149 と違う事にはならんね
コア数なんて計算数より少ない場合も想定するのが当たり前なのに
>>149 って書いてんだから、普通に読み取ったら意味が違うように見えるわ。
10分でできるんだから誰か見本を見せろよ
ProducerConsumerは@ITにサンプルソースがあっただろw あれコピペしてハッシュ計算する部位だけちょちょいと書けばいいだけじゃんw こんなの出来ないとかdaseiw
某テトリス動画と同じように何度も反復して10分なんだよ!
そのタイプの実装だと余計複雑になるぞ。
これぐらいの実装ならまゆちゃんでも10分で出来るんだよ?
Producer-Consumerパターンで何が問題なのかが知りたい まさか、productを何にすべきか分からないとか?
おかしいと思って、英語の方を見たらmodulusになってるw つまり、正しくは剰余ではなく法だな あとは、RSAのアルゴリズムを考えれば分かると思うが、 アルファベットが剰余類に限定されるのでそのサイズに収まる必要があると で、規格については詳しくないが単純な推測として、 おそらく(データ,ハッシュ)をシンボルとしているからハッシュの分を引けと
(´・ω・`)…
>>227 だれも問題とは言ってない件
>>221 みたいな実装をもとにしたら余計ごちゃごちゃになるだろって話
処理方法の大枠で見たらそりゃ誰が作ってもProducerConsumer的な流れにはなる
だからいい加減作って見せてやればみんな納得するだろ
>>229 OAEPパッティングが無い場合は最大長117ってわかったんですが
未だにOAEP有りの場合の
>>228 の長さが分かりません
一応1024bit長なんですがどう計算すればいいんでしょうか?
あとパフォーマンスを最大限発揮させるのにどうするのがいいか少し悩む。
普通のProducerConsumerパターンでどうやるのか書いてみなって。 一度に処理するデータブロックごとのシーケンスをどう制御するのかとか興味深い。 もっともそういう制御が入る時点でもう単純なProducerConsumerパターンとは ちょっと様子が変わってくるけどね。
そこには何もヒントがない件
ハッシュはSHA1って決まってるの?
C#でFPSゲームが作りたいんですがどうすればいいですか?
ゲ製作板へGo
(´・ω・`)…
結局何なんだよ、
>>148 は
>>149 みたいに単純にスレッド化されてんのか
>>209 みたいにProducerConsumerパターンを使ってんのか
それともそういうのとはまた違うやり方をしてんのか
なんだよ誰も分からないのかよさすが口だけ2ちゃんねらどもだ
見たところ特に目新しい手法は使われていないみたいだよ
かなりくだらない質問だと思いますが、、、 C# .NET の Form アプリケーションで、ウィンドウの外周を線がぐるぐる回るというのがやりたくて タイマで一定周期で Invalidate して OnPaint ハンドラでウィンドウに DrawLine しています 線は問題なく表示されますが、タイマの周期や一回の移動距離を調整してもどうしてもちらいてしまって 滑らかな動きになりません ちらつかずに描画する何か特別な方法があるんでしょうか?
247 :
245 :2010/02/17(水) 23:16:12
>>246 ちらつきが特盛りになりました(´・ω・`)
ちらついているというより、表示されたすぐ後に消されているような感じです
OSはXP? ゲームと違ってちゃんとしたvsyncの同期はやってないだろうから ティアリング回避は無理なんじゃないかな?
250 :
245 :2010/02/17(水) 23:33:39
>>248 無理ぽですか・・・
>>249 線は出ますが、消している部分が消えないので一周したら全部塗られてしまいます
ウィンドウの真ん中へんも表示されないです やり方がまずいんでしょうが
ひょっとして、ちらつくのは描画する線の全体を消したり塗ったりしているだからで
移動する部分だけ背景色や線の色で書けばよいのでは?
ちょっと試してみます
>>247 表示したあとすぐ消すようなコード書いてるんでしょw
>>251 windowsの場合その辺の制御が面倒なんだよな
ゲームのようにフレームの開始がはっきりしてて描画終わったらvsync待ちしてバッファ切替とか
そういうのじゃないしねえ
this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); こいつ入れてn秒ごとにRefleshすれば?
前のを消して新しいのを描く→時間待ち→前のを消して新しいのを描く→時間待ち→ ってやってる? まあどっちにしてもちらつくんだけど
>>250 というか、線は自分で消すの
背景を描画しなければ普通にClearするだけでも変わるはず
だからちらつきはwindowsのシステム上の問題なんで無理 vistaはOSそのものがゲームまがいなことやってるのでちらつかないかも
257 :
245 :2010/02/18(木) 00:14:33
試しに、線を描くのみにして跡を消す処理を中止したら さほどちらつかずに動くようになりました Invalidate で再描画する処理が走って、さらにプログラムで消す処理が動くから ちらついてたんですかね 期待してたヌルヌルとは違いますが、とりあえずこれでよしとします
俺ならGIFはっつけるな・・・ その上にパネルでも置いて周りだけ見えるようにする という意味のないくだレス
>>257 ソースうpすれば何かヒント出せるかもしれんぞ
260 :
245 :2010/02/18(木) 01:25:32
>>248 >>256 問題にしてるちらつきのレベルが全然違う話をしても意味ないよ。
大体今時液晶ディスプレイばかりなんだからティアリングの様子も変わってるし。
>>261 基本的な仕組みはかわってないよ
液晶だってPC側から貰った映像を元にピクセルを操作してるんだし
CRTの走査と液晶の表示じゃ元は同じでも表示のしくみが全然違うから。
脊髄で話を飛躍させるなw 問題はプログラムミスによるチカチカだろ
265 :
チカ :2010/02/18(木) 02:54:37
気軽に私の名前を呼ばないでくれる?
>>260 >>245 こんな感じのでもいけるはず (デザイナでDoubleBuffered=trueに)
ttp://77c.org/d.php?f=nk12759.zip ついでにロジック部分もいじってみた
・計算と描画を分離して、計算はタイマーで実行
・計算部分を整理
>>266 > int res = BitBlt(dc, 0, 0, Convert.ToInt32(width), Convert.ToInt32(height), dc, 0, 0, SRCCOPY);
これって何か特別な意味あるの?
validateの範囲を最小限にするとか
269 :
245 :2010/02/18(木) 07:18:39
>>266-267 おお!ありがとうございます!!
まったくちらつきませんね ヌルヌルです
これで心置きなくぐるぐるできます
液晶がどうの言っていたバカはどこ行った
ん、誰か呼んだ?
この場合、バカなのはvsyncがどうのって言ってたほうだろw
ぶらくら? 問題が生じたので WPFを終了しますとか何とかいっておわった 俺死ぬの?
死ぬだろうな。
>>274 上2つはルーズXAMLで.NET3.0以上が必要、
3つめはSilverlight3が必要かもしれない。
いずれもスクリプトだけでアセンブリさえ使ってない。
Google Chrome でもSilverlight動くんだな。知らんかった。
>>267 帰り値を受け取ってるところ?
それともBitBlt使ってるところ?
例えば、System.Xml.XmlReaderクラスはabstractで定義されてるのに XmlReader.Create()メソッドでXmlReaderクラスのインスタンスが作られるってのは いったいどういうことなのでしょうか?
抽象のCreateってC++見たいだな
実際には中でXmlReaderの派生クラスのインスタンスを作って返してる staticメソッドを使ったファクトリメソッドパターンってやつ
>>281 やはり内部で派生クラス作ってるんですか
コンストラクタから作るのじゃなければ、言語規約としては矛盾しないのかな…
デザインパターンの知識ってこういうとこでも役に立つんですね、勉強してみます
>>282 c#は本筋で関係してそうなクラス(Objectなど)以外にxxBaseとか元になってる似たような
名前のもあるしReaderが作ってことは内部でxxReaderを使ってるってことだしねえ
>Readerが作って Readerが名前に使われてるって
C#というよりVisualStudioの話になるんですが、 同一ソリューションの中の 複数プロジェクト(アプリケーション)の 同時デバッグってどうやるんですか?
開発環境のデバッグ機能って使ったこと無い
System.Diagnostics.Debugger.Break()とか
msgboxとprintfしか使ったこと無い
ご冗談を
>>286 どうやってデバッグやられているんですか?
ソースをプリントして脳内で追う
dynamic myClass = IronPythonなどでクラスを表すオブジェクト; dynamic myClassObj = new myClass(); //エラー C#ではdynamicにnew使えないのはなんで? dynamicの仕組み上は可能なはずだけどどういう意図で制限してるんだろ
ソリューションのプロパティでマルチスタートアップ
>>292 DLRのdynamicがC#のクラス用でないというだけ。
295 :
292 :2010/02/18(木) 19:19:56
>>294 たとえばSilverlight4ではこんなことができる
HtmlPage.Window.Eval("function f() { alert('エラー'); }");
dynamic func = HtmlPage.Window.GetProperty("f");
func();
もちろんHtmlPage.Window.GetProperty("f")の戻り値はデリゲートじゃなくて変なラッパーだけどちゃんと動く
よく考えたら、C#ではnewの右は型名と決まってるから
>>292 をやろうとしたら文法に手を入れないといけなくなるね
>>295 分かってるなら聞くなよ。
わざわざ書き込みに来て何がしたいんだ?
>>293 おー、素晴らしい。
ありがとうございます。
.NETで作ったソフトって配布するとVisual Studioを登録した名前がバレちゃう?
>>298 pdbファイルののフルパスが入ってることがあるから気になるならオプションで外しておけばいい。
アセンブリ情報の中に著作権者は含まれるが、デフォルトで設定されるのは会社の方だけだったかな
>>292 これはだめ?
dynamic myClassObj = Activator.CreateInstance(((object)myClass).GetType());
DllImportで引数がC/C++でLPCSTR/LPCWSTRの型の関数を使う時にC#側ではstringとして宣言してるんだけど C/C++ではNULLを渡す場面が発生するみたいで、C#も同様にnullを引数に入れるとコンパイル時にエラる。 どうやって同様の値を表せばいいの?
(string)IntPtr.Zeroが変換エラー
string として宣言せずに、IntPtr として宣言しとけばいいだけ。
どうもありがとう!
いえいえ。次回のお礼時は贈り物をよろしくね。
えっ 昨日も贈り物送ったんだけど届いてない?
独自パケットを使った通信で パケットの中身をXMLにして XmlSerializer使ってらくに通信したいんですけど 参考サイトとかないですか
>>309 わけた方がいいんじゃねーの?
通信で送受信する内容はメモリにおいて置けるし
XmlSerializerの方はMemoryStreamで読み書きできるはずだし
・・・ 参考サイトとかないですか!
そもそも独自パケットなんてできるのか?
独自パケットといってもTCP/UDPの上に載せる部分を独自にしたいだけです。 var ns = new NetworkStream(new TcpListener(11111).AcceptSocket()); var obj = new XmlSerializer(typeof(Packet)).Deserialize(ns); こんな感じでやってみると、Socketが閉じるまでシリアライズし続けるみたいなので。 こういうことをやる楽な方法はないかなと思いまして。
>>310 見落としてました。
やっぱりいったんメモリに溜めてからですかね。
うーん。
Girl nagisa = new Girl("凪沙", 13, 148.0F, 43.0F, Attribute.Twintail | Attribute.Magical); while(true) nagisa.Insert(new Stick(Material.Hard));
↑は面白いと思ってやってるらしい
素直にWCF使えばいいのに
何でわざわざ自作すんのかねぇ
WCF試してみます。
お礼くらい言え
お礼は三行以上でお願いします
あ り が とうございません
WCFってさぁ
WCF地味に凄いんだよな。 地味なんだけど。
WCF自演乙
人工知能かよ WCFすげえなおい
expressだと使えない・・・。
VWD2008Expressなら使える
Express使うならVC#よりもVWDの方がいいよ VC#からテンプレート抜き出せばVC#のスーパーセットになる
VWDええの? ASP.NETやる時だけ使ってて、C#はVC#EX使ってたよ。
プロジェクトとアイテムのテンプレートをVC#から持ってくれば VWDでWinFormsもWPFもコンソールも使えるようになるよ
Windows Formに数個のRadioButtonと1個のButtonを並べておいて、 適当なタイミング(例えばButtonのクリックイベント)でButtonのEnabledをfalseにすると、 (たぶんTabOrderが一番若い)RadioButtonのClickイベントがクリックしてもいないのに 発火するようなんだけど、これバグでなければどう理解したらいいんだろう?
Enableとかしなくても貼り付けてフォーム表示するだけで普通に発生するね ラジオチェックしてボタンをEnable=falseにしたらチェックの入ってるラジオのクリックイベントが発生したわ クリックなんか使わないから初めて知った・・・
ラジオボタンにフォーカスが移る=クリック扱いのようだな カーソルキーでぐりぐりとフォーカス移動させるとクリックイベント発生しまくる
>>334 なるほど。
でもTabキーでフォーカス移動したときには発生しないようだし、
なんだか妙な仕様に感じるなあ。
しかし、AutoCheckをtrueにできない用途(通信がらみとか)だと、Clickイベントを
使わざるを得ないわけでこういう仕様は困るなあ。
MouseClickを使えってことなのか。
でもそれだとSpaceキーとか拾えないしなうーん。
ボタンにフォーカスがあるのにEnterキーでクリックにならない。 で、カーソルキーを← →と押して、フォーカスを一端外してまた戻してやると なぜかこんどはEnterが使えるようになる。 .Netのコントロールはなんかおかしい。 そんなんプログラマが意識しなくてもデフォルトでそうなってくれてるもんだよな。
確かにEnterキーでクリックイベントは起きないな > で、カーソルキーを← →と押して、フォーカスを一端外してまた戻してやると > なぜかこんどはEnterが使えるようになる。 でもこれは再現しない Enterじゃなくてスペースキーなら使えるよ 結局、フォーカスが移るのは関係なくて、ラジオボタンの○が◎になったときに クリックイベントが発生してるみたいだから、別に問題ないじゃん タブで移動やEnterで○のままならクリックしてないのと同じだし カーソル移動やスペースで◎になるならクリックしたのと同じだし
338 :
デフォルトの名無しさん :2010/02/20(土) 11:08:51
え?
何をすれば良いのでしょう
comboBox1.Items.Add("hoge"); comboBox1.Text = "HOGE"; とすると Text の値が "hoge" の方になってしまうのですが、 大文字・小文字を区別して"hoge"が選択されないようにするには どうしたらいいでしょうか?
>>339 Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCSExpress\ItemTemplates\1041フォルダを
ドキュメントフォルダのVisual Studio 2008\ItemTemplates\Visual Web Developperにコピー
同様にItemTemplatesのところをProjectTemplatesに読み替えてコピー
WPFアプリケーションのプロジェクトはちょっとだけvstemplateファイルを弄らないといけなかったような気もする
内部で LB_FINDSTRING してるところを無視する。
無視するんですね
C++/CLIでC/C++の標準ライブラリをラップに包んでC#で利用しようとしているのですが C#で利用できる名前空間をC++/CLIで定義するにはどうすればいいか教えてくだされ。
C++のスレの範囲じゃないの
そもそもC#からC++製のマネージドなアセンブリ使う場合/clr:pureでコンパイルしないと使えないんじゃないか?
>>348 どうもありがとう!!できました!!!!
>>346 C#から参照してるからC#関係あるだろうが適当な事いうな分からないなら黙ってろクズ
>>347 知ったかぶりはやめましょうね^^
TcpClient使ってアクセスしてるならWebAPIの使い方聞いていいって事になるな。 こいつはこじつけが楽でいい。
そうだね^^
352 :
345 :2010/02/21(日) 15:35:13
C#使って351を殺す方法を教えてくださいもOKだね
多分同一人物だろうけど、勝手に「自己解決しました。」って発言するやつとか
>>349 みたいなのがいるからこの板もIDつきにして欲しいな。
何度も却下されてるから考えるだけ無駄
「なりすましされたくなければ鳥付けて質問しろ」 と次から書いとけ。
ム板の花だから
>>353 回答したら、幇助になる可能性はあるけどな。
動的に生成したPanelにラベルやらピクチャーボックスやらを載せているんですが、 panel.MouseClick += panelClick; とした場合には、パネル上の他のコンポーネント(ラベルやらピクチャーボックス) がクリックされた場合は反応しませんよね。 上に載っているラベルとかも含めてパネルがクリックされたら反応させるってことできませんか?
そっちのイベントをPanelのイベントに関連づければいい。
鳥つけるのもいいけど、ここをよく利用する人にとっても面倒だしなあ ましてや2ch利用者の多くはテンプレ読まないの多いのにそんなルール 作っても・・・とか思うわ IDつけてくれとかどこかに要望だしてやってくれるのかな?
>>359 panelってむき出しになってる部分あるの?
>>360 関連付けってなんです?
panel.MouseClick += panelClick;
label.MouseClick += panelClick;
pictureBox.panelClick += panelClick;
みたいなことをしろってことですか?
>>362 あります
パネルの部分をクリックすると反応します
>>363 は
panel.MouseClick += panelClick;
label.MouseClick += panelClick;
pictureBox.MouseClick += panelClick;
でした
>>364 わかりました、そうします
ありがとうございました
>>365 デザイナーが用意するイベント処理関数はいかにも・・という名前付くけど
実際のところは共通の処理にしても問題ないよ
ただそうなると実際どのコントロールでイベントが発生したかわからなくなるので
コントロールのNameで工夫するかTagがあいてるので識別に使うとかすれば
いけるでないの?
>>367 こういうときはその方法(NameかTagで区別する)が定石なんですか?
private void panelClick(object sender, MouseEventArgs e)
という関数で
sender instanceof Panel
ってやれるといいんですがinstanceofないんですね
sender.GetType().ToString() == "System.Windows.Forms.Panel"だといけそうですが
ちょっと冗長ですよね
as
>>368 上にでてる
>panel.MouseClick += panelClick;
>label.MouseClick += panelClick;
>pictureBox.MouseClick += panelClick;
こういう共通関数で処理する場合
object senderで送られてくるのはpanelだけじゃなくなってるので
どこかで識別しないとたぶんキャストでこけるよ
panel.MouseClick += panelClick;
panel.Tag = 1;
label.MouseClick += panelClick;
label.Tag = 2;
pictureBox.MouseClick += panelClick;
pictureBox.Tag = 3;
といった感じで識別コードでも用意して
int ControlCode = (int)sender.Tag;
>>370 一部訂正
private void panelClick(object sender, MouseEventArgs e)
{
int ControlCode = (int)sender.Tag;
//どのコントロールから来たか判断
//instanceofの代わりにキャストすればいい
Panel panel = (Panel)sender;
}
それかイベントハンドラの入り口だけはきっちりわけちゃって
そこから共通の処理関数を呼び出すとか
private void panelClick(object sender, MouseEventArgs e)
{
Panel panel = (Panel)sender;
commonfunc(panel.hoge1,panel.hoge2);
}
//labelやpictureBoxも同じようにする
>>372 Tagはobjectなんでなんでもぶら下がるからいいよ〜
TagなんてVB6かよ・・・
>>374 グローバルでフラグ持ったりするよりはいいんでないの?
他にコントロール間の関連付けとかいい方法あったっけ?
そもそも、まとめてやりたいはずだったのに、わざわざ区別するのもわからん。 それなら、別のイベントプロシージャでやればいいんじゃね? で、わざわざTagなんぞ使わなくても、is なり == なりで判定すればいいだけ。
>>374 C#って過去の言語の寄せ集めみたいな設計だから
Java臭がしてVB6.0臭がするC/C++ぽい言語ってところだよ
それ言い始めたら代入文(=)って全てFORTRAN臭がするってことになるしな。 「・・・かよ」は罵倒にすらならないね。
キチガイが来ました−。
お前のDNAから猿臭がする
MemoryStream ms = new MemoryStream(); XmlTextWriter xtw = new XmlTextWriter(ms, Encoding.UTF8); xtw.WriteStartDocument(); xtw.Formatting = System.Xml.Formatting.Indented; xtw.WriteStartElement("HAGE"); xtw.WriteElementString("HOGE","HOGE"); xtw.WriteEndElement(); xtw.WriteEndDocument(); で、msにXMLを書き込めると思ったら書き込めないんです 何か間違ってるんでしょうか・・・。
XmlWriterをClose/Flushしてない
Tagは便利だけど、これはどうなんだ?って思いながら使ってる。 もっとスマートな方法ないのかね。
Dictionaryなり使って外から管理する手もある
>>383 ないんじゃね?
2ch専ブラのスレ覧のタブ部分とListViewの連動とか
スレッドのタブ部分とブラウザー部分の連動はTag使った方が
スマートにかけるし、動的生成でとちらない限りはバグを仕込まないしねえ
>2ch専ブラのスレ覧のタブ部分とListViewの連動とか >スレッドのタブ部分とブラウザー部分の連動はTag使った方が >スマートにかけるし、動的生成でとちらない限りはバグを仕込まないしねえ これは割りと見慣れてるGUIの実装の例ってことで・・
専ブラの例なら、データ構造内に持つのが素直じゃね?
>>387 内部構造は別途持つよ
最終的なそれぞれのリンクの話
目印つけたりして判断ロジック入れるのもいいけど
動的にオブジェクト作るときは関連については全部
わかってるんだから、イベント受けた側で条件式使
わないで何をすればいいかわかるようにすればいい
controls.Addでの関連(表示だけの関連)
上panel <-Button
下panel <-ListView
Button.Tag
└ListView.Tag
└内部のデータ構造への関連
ListView
└ListViewItem.Tag
└内部のデータ構造への関連
内部のデータ構造
・・・・
こうすればキャスト数回ですぐに処理可能になる
ごめん。全然意味がわからん。
俺は28%ぐらい理解した
そもそも動的にパネルを生成するのはいいとして、その上のコントロールまで 動的に生成する、などという泥臭いやり方に問題があると思うんだけどね。 上にのっけるコントロールの種類や配置を状況によって変える必要がある、 とかでなければ、UerControlを使うべきじゃないのか。
Tag使うくらいならIExtenderProvider
TcpListenerが気がついたら破棄されてるんですが何ででしょう・・・orz 変数としてはずっと保持してるはずなんですが・・・意味がわからん
変なことしてるからだろう
設定画面用のフォームを作成してXMLファイルから設定を読み込み。 メニューから設定画面を呼び出すと1度目は表示されるのですが2度目からは破棄されたオブジェクトとなってしまいます。 FormをClose()しているのですがClose()すると破棄されてしまうんでしょうか?
フォームが閉じると、オブジェクト内で作成されたすべてのリソースが閉じ、フォームが破棄されます。
うん。
ああ・・・そうだったんですね・・・orz 1から作り直してきます
モードレスならHideでも行けるぜ
C#って画像を任意の三角形で切り抜いて表示とかできる?
できる
unsafe使わないと遅い
例えば単にClip領域を設定して描画するだけの話で、そう遅いとも思えんけどね。
>>391 まあサンプルが2ch専ブラの話だしねえ
既存の2ch専ブラを模倣するとそういう実装になるってことじゃないの?
// Form: DoubleBuffered = true private void Form1_Resize(object sender, EventArgs e) { this.Invalidate(); } Image im = Properties.Resources.画像; FontFamily fontf = new FontFamily("Times New Roman"); StringFormat stringf = new StringFormat(); private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; using (GraphicsPath path = new GraphicsPath()) using (Brush ib = new TextureBrush(im)) { path.AddPolygon(new[] { new Point(200, 50), new Point(50, 250), new Point(250, 250) }); path.AddString("Drawing", fontf, (int)FontStyle.Bold, 72, new Point(0, 0), stringf); float sc = this.ClientSize.Width / 300.0f; path.Transform(new Matrix(sc, 0, 0, sc, 0, 0)); g.SmoothingMode = SmoothingMode.AntiAlias; g.Clear(Color.Black); g.FillPath(ib, path); }}
>>406 アンカーくらいつけろよ、くちべた君(笑)
必死に考えて、ケチつける所が「アンカー付いてない」だけなんてwww
しかも「くちべた君」w
C##
>>406 やってみたらできました
ありがとうございます
415 :
デフォルトの名無しさん :2010/02/22(月) 16:01:42
C#初心者です。 以下のようにタイマー割り込みが来るたびに newでインスタンスを上書きするような記述はおかしいでしょうか? なんかどんどん処理が重くなってる気がするんですが・・・ 原因がここじゃないかと思って質問しました。 よろしくお願いします。 class hoge1 { public hoge1(int i) { //コンストラクタ } } class hoge2 { timer割り込み() { myHoge1 = new hoge1(i); i++; } hoge1 myHoge1; int i=0; }
>>415 そのnewをやめて軽くなるならそれが原因じゃね?
DisposeやFinalizeがあるクラスでなければ、 ほとんど問題にならないと思うよ。
何がどれぐらい重くなるのかも調べずに「気がする」って言われてもなぁ
ほとんど問題にならないと思うよね。
問題は毎回 new する必要が本当にあるのかどうか
普通に考えると、この程度で体感できるほど重くなる筈がない。 勘違いか見当違いの所探してるだけだろ。
へえ
別の場所かコード端折ったとこに原因があるか
newしてるクラスがかなり小さく、かつ内部でアンマネージ捕まえてたりすると重くなるかも
たしかに
適当に重くなったときにCGに強制回収させてみて、それっから処理が軽くなったら・・・とかで調べてみるとか
くちべた君(笑) これははやるかもしれん
CLRでファイルマッピングがサポートされるのはV4からだっけ? どういう構造のライブラリーか知らないが、普通にP/InvokeでファイルマップのAPIを使うと、 ネイティブのViewからマネージドメモリへマーシャリングが起きると思うんだけど。
SQL Server Compact Editionでも使えばと言いたくなるのだけれど
自宅でgoogleで「C#」で検索してもCしかかからないんだけど 会社で検索するとちゃんと出る… なんか設定とかあるのかねこれ
アドレスバーにq=C%23って出てるか?
他のキーワードとあわせてC#検索したらその後からC#単独で検索しても
引っかかるようになった。
どんなロジックなんだgoogle…
>>433 出てるよー
FILE_ATTRIBUTE_TEMPORARY指定の一時ファイルを使って、 擬似MemoryStreamを作ったことならある。
>>429 よく見てないがそれ以前にシリアライザなんか使ったら遅いに決まってる。
>>434 普通に前回までの検索結果が反映されてただけじゃないの?
>>430 P/Invokeってそんなにコストがかかるの?
ライブラリーのソースを調べたら、思いっきり使いまくってるんだが・・・
P/Invokeのセキュリティチェックと、場合によってマーシャリングはそれなりにコストはかかるが、 メモリマップした後の単なるポインタアクセスじゃそんなの関係ないからそう影響はない。 もちろん、例えばタイトなループ内でP/Invokeを繰り返したら影響はでかい。 それとは別に、カーネルモードへの移行が必要となるようなAPIでは、 P/Invokeとは関係なくかなり負荷が高い。 カーネルオブジェクトの操作する場合など。
セキュリティチェックを省いたり、bittableなやり取りだけになるように工夫すれば、大した負荷はない。
メモリーマップドファイルて普通の業務アプリ使ってて何に使うのかぱっとおもいつかん・・ DBとかだと有効かもしれんが普通DB使うだろうし・・・ ん〜・・・ だれかおいしい使い道教えてくれ
>>441 エディターの類。
巨大なファイルもファイルマッピングで編集すると、効率がいいらしい。
巨大なファイル使う時ぐらいでしょ。 業務アプリでは考える必要ないと思う。
プロセス間である程度大きいデータを共有したいときとか。 で、かつ、ファイルやDBとか使えないときに使ったことがある。
どなたかDelphi使いでC#に乗り換えた方いますか? DelphiでのTGraphicControlみたいに簡単にグラフィック系のコンポーネントを作るには C#だとなんてクラスを使うんですかね? C#でメータとかグラフとかのコンポーネントを作りたいんだけど・・・
WPFつかえばらくちんぽんで出来るYO!
Controlから直接派生してOnPaintをオーバーライド まあWPF使えばコード一行も書かずに何でも描けるけどね
あら、即効で・・・ WPFですか。 ちょっと勉強してきます。 ありがとうございます。
SqlCommandにパラメータ付のSQL文を設定した場合、プロファイラでトレースすると exec sp_executesql N'SELECT * FROM TAB WHERE COL = @VAL',N'@VAL char(1)',@VAL='a' 上記のような文字列(上記は例)が取得できます。 この文字列をプログラム上からログに落としたいと思っています。 どうにかして文字列を取得することはできないでしょうか? SqlCommandのパブリックなメンバでは取得できないので リフレクションとか使えば取得できるかと思ったのですが、 この文字列を保持しているプライベートなプロパティが見つかりませんでした。
むしろSQLクライアントでログ取ればいんじゃね? 少なくともOracleのにはあったハズ
パケットキャプチャすればいいよ
俺はparametersを自力で展開してたけど、いいやり方あるのかな Nullの扱いと’のエスケープをちゃんとすればログのSQLをコピペして使えたけどどうなんだろう
オレもいい案があれば知りたい
bool createPanel(){ ... bodyLabel.Text = "テスト"; bodyLabel.Width = this.Width - 20; bodyLabel.BorderStyle = BorderStyle.FixedSingle; ... panel.Controls.Add(bodyLabel); return panel; } こういう関数を繰り返し呼び出して、 出来たパネルを、別のメインとなるパネルに縦に並べていっているんですが、 メインパネルのサイズ以上に並べたあたりから(メインパネルはAutoScrollをtrueにしてあります) bodyLabelの見た目の長さが違ってくるんですが、なぜでしょう? 見た目としては↓みたいな感じです。 [テスト ] [テスト ] [テスト ] [テスト ] [テスト ] デバッガで止めてみると、bodyLabel.Widthの値自体は同じものでした。
きちんと切り抜きして出直し。 boolのControlsプロパティにAdd? 問題はpanelの方だろさ。
>>456 すいません
bool createPanel(){
Panel panel = new Panel();
Label bodyLabel = new Label();
...
bodyLabel.Text = "テスト";
bodyLabel.Width = this.Width - 20;
bodyLabel.BorderStyle = BorderStyle.FixedSingle;
...
panel.Controls.Add(bodyLabel);
return panel;
}
パネルとパネル上のラベルは関数内で生成してます。
これ、コンパイル通るのか?
どうやったらコンパイル通るんだろう using bool = System.Windows.Forms.Panel;は通らないね Panelは質問者自身が作ったクラスで、boolへの暗黙の型変換演算子をオーバーロードしてるのか
あああすみません、今気付きました; 関数の戻り値のほうですか もちろんboolではなくてPanelです
うん、で、panelのプロパティ設定には問題ないのか?という話。
というかまあ、問題が再現可能なコードを書いてそのままコピペしてない時点で、 言っちゃ悪いけどもう「問題」は質問者自身の問題解決能力にあることがはっきりしてる。 こういう人ってどういう思考回路してるんだろう。 マジで理解不能。
多分だけど、まるごとコピペすることが手抜きに思えたりするんじゃない? だから手動でわかりやすく抜粋しているつもりなんだよ。 はた迷惑だけどね。
抜粋じゃなくて隠蔽だけどな
.NET 2.0のlistviewで質問です。 View=Details、オーナードロー、仮想モード、MultiSelect=true、HideSelection=falseにしています。 カラムをクリックしたらソートするようにしてるんですが、選択行が変化しません。 たとえば3行目が選択されていたとして、ソートの結果3行目のデータが2行目に移動しても 相変わらず3行目のみ選択された状態になります。 このあたりの処理も何となく自分でやらなきゃとは思うんですが、どうしたらいいでしょうか?
オーナードローなんだから自分で描画が必要でしょう。 OnDrawColumnHeader、OnDrawItem、OnDrawSubItemのイベントを自分で記述する。
469 :
467 :2010/02/28(日) 15:10:36
>>468 それらのハンドルは記述していて、ソートを行わなければ正常に表示されます。
問題は、ソート後に描画しようとしているデータがソート前に選択されていたかどうかを
どうやって知るか、ということだと思うんですが。
オナニードロー
>>467 それはオーナードロー関係ないんじゃねーの?
ソートをかけるタイミングで行の位置じゃなく選択行のデータを覚えてて
ソート後にそのデータに対して選択をセットする・・・とかだろ
VirtualModeの場合、 まず、各アイテムの選択状態も自分で保持しておく必要がある。 で、ソートが終わった後でそれに従ってSelectedIndicesをクリアして追加したりする。
SubItemごとに固有のtag値を持って描画時に判断すればいいんじゃないのか?
ソート前のSelectedItemsから項目コピーしといて、 ソート後にSelectedIndices.Clearして、Itemsの各itemを コピーしといた項目にあるかどうかContainsしてSelectedIndices.Add じゃないかなー?試してないけど。
475 :
467 :2010/02/28(日) 17:09:14
>>471-474 ありがとうございます。
なるほど SelectedIndicesがポイントですね。
ちょっと試してみます。
Assertに引っかかるとダイアログが出る。 だが、そのダイアログが大きすぎで画面からはみ出てしまう。 このままじゃあ、ボタンすら満足に押せないんだが、どうにかする方法はない?
ARIのどれかキーボードで押せばいいんじゃね
出力するメッセージを減らす
なんでAssertでそんな膨大なメッセージが要るんだ…
>>479 普通にAssertさせたら、ものすごい行数のスタックログが表示されて…以下略
ダイアログにフォーカス映してCtrl+C
mouse enterで設定したテキストを表示させたいんだけど、その表示のさせ方が、htmlでいうaltタグとか画像のtitleタグ みたいに説明を出したい。
ああ途中送信してしまったわかりにくい説明で申し訳ない
ToolTip
ありがとう
WCFのシリアライズ便利だな XmlSerializerよりもずっと使いやすい
>>486 プロレス団体みたいな名前がついた技術は今だにまったく使ったことないやw
XMLシリアル化と比べて特にどんな点が便利なの?
教えない♥
プロパティだけではなくフィールドもシリアライズ可 メンバや型がpublicでなくてもいい Dictionaryもおk 循環参照対応 速い軽い SerializableAttribute, ISerializableにも対応 欠点 XMLのフォーマットはほとんど制御できない。既存のXML文書の読み取りには使えない。
連続して申し訳ない。 Accessと繋いでデータグリッドビューにデータを表示させてる。 データセットでselect * fromテーブル名 でやってるから主キーまでdgに表示されちゃうんだよね。 編集の時に主キーが一致するものを・・・にしてあるから主キーは絶対取得したい。けどdgにはでてこないでほしい・・・ あとでボタンを押したら選択されてる行の中身を全部からにしたいんだけどうまくいかない。 currentRowsさん調べたけどわからなかった。
要するにSoapFormatterの出力を普通のXMLに変更したようなもんか
>>490 デザイナでデータソース設定してないの? 列の編集とかできるのに
どうしてもコードでやらなきゃ気が済まないってんならLoadイベント辺りでDataGridView.ColumnsからRemoveすればいいけど
現在行とか使うならデータソースにはBindingSource使うのがベター
>>489 なるほど。
型がpublicでなくてもいいのは魅力かも。
XMLSerializerだと、設定値を保存するための他からは用のないインナークラスを
publicにする必要があったから。
バージョントレランスはどうなのかね。
メンバーが増えたり減ったりしてもそのまま読めるんだろうか。
何をシリアライズするかはあくまで明示的に決めるのでXmlSerializerに近いかな 型にDataContract属性を付けた場合はDataMember属性が付いたメンバ(private可)だけがシリアライズされて DataContract属性を付けない型についてはパブリックメンバのみがシリアライズされるようになってる
>>492 dg部分は他人が作ったんだけどめちゃくちゃなソース書いてて、ソース書けないのにデザイナ使わずに設定してた。
removeタメしてみます。感謝。
>>493 とあるゲームで使ってるけど、増えても減っても大丈夫だよ。
ないバージョン→あるバージョンの場合は、エラーにならないが追加されたフィールドは初期値
なので自分で初期化しないと駄目。
特に a= new hoge()とか書いているやつは、newされていないので自分で生成する必要がある。
今OS再インスコしたばかりで手元にないけど、確かデシリアライズされた時に呼ばれるメソッドが
あるのでそこで初期化すればいい。
あるバージョン→ないバージョン
シリアライズされたフィールドは無視してくれる。
特に処理必要なし。
ごめん、WCFのシリアライズじゃなくて.Netのシリアライズの話だったorz
Webプログラムしか経験がなく動画処理に手を出してみたくてC#はじめました
ttp://support.microsoft.com/kb/436361/ja これを見てソースをコピペして適当な動画にさしかえて実行したところ
音声がなるのみで映像がでてきませんでした
何を追加したらよいのでしょう?
コメントもないし何をしてるかよくわかりませんが
一応実行できるソースをいただければ後は頑張って調べてみたいと思うので
どうかよろしくお願いします
しかしMSDNのドキュメントは読みづらいですねIDE(VC#)も使いにくいし・・・
なれるまで時間かかりそうorz
MSDNが読みづらいってのは同意するけど、VS以上のIDEって存在するか?
月蝕
eclipse も VS も似たようなもんだと思うけどなぁ。 シコシコ書くなら emacs ちゃん!
>>498 うちはXPだけど、再生するファイルを以下にしてちゃんと表示された
objMC.RenderFile( @"C:\WINDOWS\clock.avi" ); //このファイル何のためにあるんだろ
映像codecの問題じゃないかな
その映像が出ない動画、エクスプローラからダブルクリックで表示される?
503 :
デフォルトの名無しさん :2010/03/03(水) 09:37:42
>>502 windows98くらいからの名残じゃなかったっけ?
//このファイル何のためにあるんだろ
システムフォルダに結構昔からの名残があったりするよ
Win3.1のVideo for Windowsにもあったな。
>>496 それは問題ないとは言わないだろうw
XmlSerializerやDataContract(WCF)では中身を丸々保存するんじゃなくて
外から見て書き写すので実装がごっそり変更されてもかまわない
506 :
498 :2010/03/03(水) 16:57:24
レス遅れてすみません。
>>502 さんのファイルにしたら再生することができました。
他のaviで試してみたところ正常に動作したので
最初に実験に使ったファイルがmpgだったのがいけなかったようです。
コーデックはffdshowが使われているようです。
wikipediaの説明を見るかぎりコーデックが入ってればなんでも再生できそうな雰囲気だったのですが、
何か勘違いしているのかもしれません。
再生できましたのでソースの意味をこれから調べてみたいと思います。
レスいただいた方ありがとうございました。
ちなみに普段使ってるのはEclipseです。
似たようなもんなんですけど何かが違う・・・
何がおかしいのかよくわからないけど細かいところで違和感が・・・
とそんな感じです。
ボタン押したらパネルのbackground imageを無くして初期状態にしたんですがどうすればいいでしょうか
したんだったらそれでいいじゃないか したいんだったらnull入れとけ
メモ帳なんかで保存しないで閉じた時になるようなサウンドなんですが こういうWindows専用のプログラムって Windowsフォルダ内にそういうファイルがあると踏んでプログラムするもんなんでしょうか?
510 :
デフォルトの名無しさん :2010/03/04(木) 07:58:48
>>509 あれはwindowsのシステムサウンドを鳴らしてるだけでしょ
windows システム サウンド
とかでググルとわかるよ
>>510 ありがとうございます
鳴らすための専用のプロパティまで用意されていたんですね
簡単に鳴らすことができました
>>511 それぞれの時に鳴る音はWindowsの設定で変更できるよ
普段まったく見えないコンポーネント群の中で どれがどういう奴か網羅してるサイトとかってある?
> 普段まったく見えないコンポーネント群 ってなんだよ?
.NETでコンポーネントっつったらIComponent継承してる奴全部だと思うけど 全部網羅してる奴なんてMSDN以外にないだろうな
正規表現で、 Hoge(Hoge(Hoge("unko","unko2"),"hogehoge"),"syobo-n") みたいのを解析したいとしたらHoge(xxx,xxx)のような感じでかつなかにHoge(xxx,xxx)を含まないものでマッチさせて、 それを取得するとともに適当な文字、たとえば###にReplaceしてその上の階層をマッチさせて…みたいな感じになるのかの. まんどくせorz
WPFのコンポーネントはIComponent使わないよ
>>516 一番いいのは解析しなくて済む方法を考えることだお
>>516 ちゃんとソースコードの解析とかDSLとかやりたいんだったら
伝統的なコンパイラ製作の手法を使ったほうがいいよ
C#ならGPPGとか使ってパーサを生成する
こんなの解析したとしてもしれてるだろ
521 :
デフォルトの名無しさん :2010/03/05(金) 10:22:11
入れ子のある構造は正規表現向きじゃないな
>>514 ツールボックス右クリック アイテムの選択で出てくるリストで
チェックされて無いやつ全部
MSDN以外にあるわけねえだろ
525 :
デフォルトの名無しさん :2010/03/05(金) 11:45:33
なんかでるなあ グレーアウトというか半透明で後ろの色と重ねてあるというか・・・そんな表示で 部品の名前見てるとVB6.0時代の名残?
引数の形式を
>>516 の(再帰, "文字列")に限るなら
(?<id>[\w\W]+)\((?<r>.*),"(?<str>[^"]*)"\)
で最長一致でキャプチャしてrについて繰り返せばいけそう
一般的にやるのは.NETの正規表現だけではたぶん無理
.NETにはじめから付いてるコンポーネントの中でデフォルトで ツールボックスに表示されてないものは実際あんまり使うことないと思うよ VB6っぽいのはたぶん.NETじゃなくてCOMのコンポーネント COMの方はどうしてもというわけでなければなるべく使わない
>>527 乗り物全集の中で、デフォルトが自家用車だらけなのに
裏ではこっそり1輪車からアポロとか回天とかあったらさ・・・
必死なときは回天使ってみたい場合もあるじゃん
知らなきゃ自動車を容器で包んで見た目潜水する特攻≠自沈機械つくらなきゃならん
529 :
デフォルトの名無しさん :2010/03/05(金) 15:56:14
何が言いたいかわかりにくいよw 理解したけどw
で、誰もメンテできない、糞アプリが出来上がると
System.Drawing.BitmapをDIBSectionみたいにピクセルにポインタで 高速にアクセスしたいんですけどどんな感じで実現できますか。 ゲームで利用するためにαブレンドとか加算合成とかを実装したいです。
LockBitsでググれ でもどっちにしろGDI+でゲーム作るのはやめたほうがいいと思う DirectXやWPF使えば全ての努力が虚しくなるくらいの圧倒的な速度が簡単に得られる
LockBitsしてBitmapDataに書き込みしてUnlockBitsで書き戻し ただしコピーが入る WPFでPixelShader使った方が早いかも知れない
なるほどやっぱりメモリ直接触れないのがネックですね。 WPFってコントロールをXML経由で制御するイメージがあって 遅いと思い込んでたんですけどちょと試してみようかな… C++ではDIBSection使ってたからDirectXはちょっと今更感が… ありがとうございました。
WPFもDirectXベースだからな αブレンドや加算合成などは自分では一切実装せずに全てハードウェアに丸投げするのが基本
536 :
516 :2010/03/05(金) 22:40:20
いろいろレスあり。 正直ANTLRでも使いたいところだけど、ほんの一箇所の機能のためにランタイムDLLがいくつも増加するのがなぁ…
字句解析 & 構文解析は書いてみると想像してるより結構簡単だから 限定された部分だけなら自前で書いちゃうのもありだと思うよ。
今の時代PCでもCPUとメモリのリソースが滅茶苦茶多いしブーストラップの必要も全くないから 字句解析と構文解析なんてあんまり神経質にならなくても適当な資料当たって組めば良いと思うよー
ANTLRはランタイムライブラリの出来が悪いんだよなあ Ironyなんか面白そう
GDI+はラスタオペレーションなくなったのか 殺してやる
時代はピクセルシェーダだよ WPFはもちろんSilverlightでもサポートされてる
やっぱWPFやんなきゃダメだな orz
544 :
デフォルトの名無しさん :2010/03/07(日) 00:30:38
C#の文法的なことを聞きたいのですが、 Button のClickイベントにプラスするdelegateの匿名メソッドの中でthisって書いてもこのthisはButtonでなくFormをさすんでしょうか? ちなみに、Form1の中にButton1があり、Form1.cs(class名:Form1)のファイルに書いています。
うん JavaScriptとは違うというかJavaScriptが異端
546 :
544 :2010/03/07(日) 00:35:47
>>545 ありがとうございます。
JavaScriptだと逆の結果になるんですね。
とりあえず、C#の場合はFormをさすということがわかり、ありがたいです。
結構長い間疑問だったんで・・ありがとうございました。
>>546 >C#の場合はFormをさすということがわかり
ちょっと違う
>>544 の例としてはそうだけどね
正確には今コード書いてるクラスのことになる
IDEでコード書く場合はFormクラスを継承したForm1にコードを書くことが多いので
thisがForm1をさしてるけど
buttonを継承したクラスを作ってその中でthisを使えば
buttoを継承したクラスをさす
class MyButton : Button
{
public MyButton()
{
//この場合はMyButtonのこと
this.size = new Size(120,30);
}
}
548 :
544 :2010/03/07(日) 16:24:51
>>547 どうもありがとうございます。今書いてるクラスが主?っていうかthisの主体になるんですね。
よ〜く、わかりました。勉強になりました。ありがとうございました。
クラスというよりはインスタンスだな staticメソッドでは使えないから
ちょいと質問 SELECT Format([日付テーブル]![日付],"yyyy/mm/dd") AS 年月, スケジュール.タイトル, スケジュール.メモ帳 FROM スケジュール ORDER BY Format([日付テーブル]![日付],"yyyy/mm/dd"); これC#で使いたいんだけど、yyyy/mm/ddのところどう書いたらちゃんと動いてくれる?
>>550 LINQでってこと?
これでいける。
using (var context = new MyDBDataContext())
{
var rows = context.Order
.Select(r => string.Format("{0:d}", r.transactTime));
foreach (var row in rows)
Console.WriteLine(row);
}
>>550 これC#というよりSQLだよね
FROMに指定されてないテーブル参照してるよ
使ってるDBとエラーメッセージくらい書こうね
あと自動で作成されたSQLそのまま使うより
もう少し簡潔にした方が良いよ
そうか、春休みか。
なぜかMSDNの字が小さく変更されたような
555 :
デフォルトの名無しさん :2010/03/09(火) 13:10:44
ライトウェイトがすばらしい
・構造体では、インターフェイスを実装できます。 なんか意味あんのかなこれ
なぜ意味が無いと思ったのか聞きたい
IComparable<T>とかIEquatable<T>とかは知らないうちに恩恵にあずかってる
1/1 Type.GetTypeで希望のTypeを取得出来なくて困っています。 取得したいTypeはアプリケーションのプロジェクトとは違う、 ライブラリ用プロジェクトで作成されたアセンブリ内のclassのものです。 アプリケーションのプロジェクトにて、ライブラリ用の プロジェクトをインポートして使用しています。 テストコードでは下記のようにしてみました。 System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom( "Lib.dll" ); var _targetType = typeof( KML.FileFormat.PseudoXML.ASDASD ); Type _type = Type.GetType( _targetType.FullName, true, false ); 症状は TypeLoadException が発生します。
2/2 そこで、アセンブリ名を指定して Type _type = Type.GetType( _targetType.FullName + ",Lib.dll", true, false ); とした場合は、GetType内で、 System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Lib.dll'、またはその依存関係の 1 つが読み込めませんでした。 との事、なので Type _type = Type.GetType( _targetType.FullName + @",C:\aa\bb\cc\Lib.dll", true, false ); とし、アセンブリへのフルパスを指定した場合は、 System.IO.FileLoadException: 指定されたアセンブリ名またはコードベースは無効です。 となり、いずれも目的を果たせませんでした。 ITMediaやリフレクションの記事を掲載しているブログなどは、 簡単に実現できるような感じで書いているのですがなかなか上手くいきません。 どなたか問題点をお教えいただければ幸いです。 よろしくお願いします。
作業環境は、 OS:VISTA32bit VisualStudioC#2008ExpressEdition 対象フレームワークの設定は3.5です。
何をしたいのか分からん アセンブリを動的ロードするならAssembly.GetTypeとか使えばいい
最終的にやりたいことは設定ファイル(text)に基づいて、 指定のclassをインスタンス化する事です。 その前段階で指定したclassのTypeが必要なようですので、 Type.GetTypeで得ようと試みていたところです。
> その前段階で指定したclassのTypeが必要なようですので、 そのTypeはLoadしたAssemblyオブジェクトからAssembly.GetType等で取得するもの
どうでもいいけど 1/1、2/2じゃなくて1/2、2/2じゃないのか?
>>562 >>564 ご指摘ありがとうございます。
Assembly.GetTypeで上手く取得できました。
>>565 たしかに・・・。
申し訳ない。
> その前段階で指定したclassのTypeが必要なようですので、 くそわろた。
1/1,2/2が地味にきくわ
すみません。質問です。
XMLの件なので、こちらで聞くか迷ったんですが、こちらでお願いします。
http://weather.livedoor.com/forecast/rss/warn.xml 上記のXMLを解析しようと思い、Byte配列に受信しました。
そのByte配列をEncoding.UTF8.GetCharsに入れてやるとエラーになります。
原因を調べると、「〜で質問してみましょう」の「質」の字が
e8 0d 0a 35 61 38 0d 0a b3 aa
となっており、「質」の字の間に改行コード(0d 0a)とよくわからない文字列(35 61 38)が入っていました。
(ちなみに「質」はUTF8でe8 b3 aa)
XMLの処理は初めてなので、よくわかっておりません。
こういった経験や、対処された方がおられましたらいい対処法をご教授ください。
環境は.NetMicroFramework、VisualStudio2008Express、WindowsXPProです。
>>569 Byte配列に格納する時点で失敗してる可能性が大。
35 61 38 -> 5a8 -> 1448 TCPのデータ長がこんなんだっけ?
573 :
デフォルトの名無しさん :2010/03/10(水) 15:40:56
受信の際のエンコードはxmlの中にかかれてるので自動で認識した後 勝手にucs-2に変換されてない? xmlとかの問題じゃなく文字コードの扱いを分かってないような
575 :
デフォルトの名無しさん :2010/03/10(水) 15:52:28
>上記のXMLを解析しようと思い、Byte配列に受信しました。 Byte配列に受信しました。 この部分のコード晒せる?
バイト配列取得以降の問題かもしれない。 Socketクラスを参考にしていた場合、そのサンプルはバグというか不親切。 do { bytes = s.Receive(bytesReceived, bytesReceived.Length, 0); page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes); } をUTF8に変更しただけじゃダメ。これは多バイト文字の途中だろうとお構いなし。 文字の境界を判断するか、それとも全部バッファに取ってから変換する必要がある。
あ、 0d 0a 35 61 38 0d 0a の理屈が付かないからそれは無いか・・・
578 :
デフォルトの名無しさん :2010/03/10(水) 16:02:19
WebClient.DownloadDataあたりだったら問題ないのかしらん
580 :
デフォルトの名無しさん :2010/03/10(水) 16:05:10
>>579 というか通信にしろファイルにしろエンコード指定しておけば指定したエンコードで読み込んだあと
ucs-2に勝手に変換してくれるはずなんだけどな・・・
>>575 そのままコピペなんで無駄なコードあるかもしれませんが・・・
一番下のwhile文で1024バイトずつ読み込んで、大きな配列につないでます。
String Server = "weather.livedoor.com";
String URI = "/forecast/rss/earthquake.xml";
const Int32 HttpPort = 80;
const Int32 BufferSize = 1024;
using (Socket requestSocket = ConnectSocket(Server, HttpPort))
{
String request = "GET " + URI + " HTTP/1.1\r\n";
request += "Host: " + Server + "\r\n";
request += "Connection: Close\r\n";
Byte[] requestData = Encoding.UTF8.GetBytes(request);
Byte[] recBuffer = new Byte[BufferSize];
Byte[] recBufferFull = new Byte[BufferSize * 100];
requestSocket.Send(requestData, requestData.Length, 0);
DateTime timeoutAt = DateTime.Now.AddSeconds(30);
while (requestSocket.Available == 0 && DateTime.Now < timeoutAt)
{
System.Threading.Thread.Sleep(100);
}
Int32 bytesRead = 0;
Int32 bytesReadBefore = 0;
while (requestSocket.Poll(10 * 1000000, SelectMode.SelectRead))
{
Array.Clear(recBuffer, 0, recBuffer.Length);
bytesRead = requestSocket.Receive(recBuffer);
if (bytesRead == 0)
{ break;}
recBuffer.CopyTo(recBufferFull, bytesReadBefore);
bytesReadBefore += bytesRead;
}
582 :
デフォルトの名無しさん :2010/03/10(水) 16:15:56
Socketとかhttpの練習とか学習? 単純にrssリーダーぽいことができればいいとかなら WebClientでデータとってきてxmlに投げるとかすればいいだけだよ
応答のHTTPヘッダがなんて言ってるのかも気になる
>>582 WebClientググったら便利そうですね。
ただ、MicroFrameworkにはないみたいなので、同じような機能のライブラリ提供している方がおられるので、それを利用してみたいと思います。
もしくはHttpWebRequestでいいんでしょうか?
>>583 HTTP/1.1 200 OK\r\nDate: Wed, 10 Mar 2010 07:24:48 GMT\r\nServer: Apache/1.3.41 (Unix) mod_perl/1.30\r\nPragma: no-cache\r\n
Cache-Control: private\r\nVary: User-Agent\r\nContent-Type: text/xml; charset=utf-8\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n4ac\r\n
ヘッダのstring変換後はこんな感じです。
chunked
586 :
デフォルトの名無しさん :2010/03/10(水) 16:36:45
0d 0a 35 61 38 0d 0a は長さ5a8バイトということか
>>585 でFAじゃまいか
こういうのは透過的に扱ってくれるライブラリ使わないと面倒くさいね
589 :
583 :2010/03/10(水) 16:42:17
>>586 丁寧に書いてもらってありがとうございます。
MicroFramework用に変更して使ってみます。
>>587 どうやらそうっぽいです・・・そのバイトずつわけて受信すればいいんですかね?
>>588 chunkedググってみます
HTTP/1.1 は chunked で送られてくるからめんどくさいよね
592 :
デフォルトの名無しさん :2010/03/10(水) 16:49:38
>>590 いや・・・
データ本体がそのサイズってことだろ
>>586 で受信したテキストデータ
HTTP/1.1 200 OK
Date: Wed, 10 Mar 2010 07:46:23 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.30
Pragma: no-cache
Cache-Control: private
Vary: User-Agent
Content-Type: text/xml; charset=utf-8
Connection: close
Transfer-Encoding: chunked
4ac
[rssの一つ]
5a8
[rssの一つ]
5a8
[rssの一つ]
以下略
こんなパターンでくるのか
もうこの程度ですら自力で実装するのを億劫に感じててヤバイ
594 :
デフォルトの名無しさん :2010/03/10(水) 16:54:02
>>593 そりゃIDE+VC#って人間を退化させるよ
パソコン上でIMEになれてしまって咄嗟に漢字がかけない感覚に似てる
MicroF/WはCompactF/WよりさらにAPIが少ないの?
>>591 そうなんですか。勉強になります。
>>592 書いていただいたソースは、1024バイトずつ受信してて、resSizeが0になったら受信終わりですよね?
どうやってデータ本体毎にわけるのかよくわからないです。
いただいたソースだと4acとか5a8のような不要な情報も入りそうな気がするのですが。
>>595 そうです。かなり少ないです。
しかも英語ページしかないのでなかなかとっつきにくくて・・・
>>592 一部訂正
HTTP/1.1 200 OK
Date: Wed, 10 Mar 2010 07:46:23 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.30
Pragma: no-cache
Cache-Control: private
Vary: User-Agent
Content-Type: text/xml; charset=utf-8
Connection: close
Transfer-Encoding: chunked
4ac
[4acバイト分のデータ(文字コードはどれか不明)]
5a8
[5a8バイト分のデータ(文字コードはどれか不明)]
5a8
[5a8バイト分のデータ(文字コードはどれか不明)]
以下略
5a8
[5a8バイト分のデータ(文字コードはどれか不明)]
0
最後は0で終わってる
こんなパターンでくるのか
599 :
デフォルトの名無しさん :2010/03/10(水) 17:04:56
>>596 いやそんなに難しくないでしょ
4ac 5a8でバイト数(文字数?)を見て行けばいいだけだし
0d0aは単なる改行コードだしね
>>586 のコードをMicroじゃないFrameworkで動かしてみて受信データを見てみなよ
600 :
デフォルトの名無しさん :2010/03/10(水) 17:06:20
流れぶった切ってちょい質問 struct A { int x; int xsize; } int sx = 0; List<A> alist = new List<A>(); alist.ForEach(delegate(A a) { a.x = sx; sx += a.xsize; } こういう感じで、構造体リストのある項目を全書き換えしたいんだけども、 forループするしか手はない? いちいちコピー&書き戻しが発生するからできればしたくない・・・
>>599 全部受信してからそれ毎に区切っていく感じでいいんですね。
それなら簡単そうです。
ちょっとFramework変えてやってみます。
ありがとうございます。
603 :
デフォルトの名無しさん :2010/03/10(水) 17:51:06
604 :
デフォルトの名無しさん :2010/03/10(水) 17:52:37
まだ効率だけにこだわっているのか
606 :
601 :2010/03/10(水) 18:10:45
いや別にループ怖いって話じゃなくてwww 構造体コレクションの実体に直接アクセスしたいってだけ
そっちはループ処理したくないというアホ こっちは多分一時コピー(ry var tmp = alist[i]; // tmpを変更 alist[i] = tmp;
なんで構造体なんだ? クラスにしちゃえばいいじゃない
仕方なく構造体のコレクションを使うときに 効率は別にしてもなんか気持ち悪いのはよくわかる
610 :
601 :2010/03/10(水) 18:49:47
>>608 実体コピー前提の使い方するから>構造体な理由
むしろ間違って参照渡ってしまった時のバグが怖い
>>609 そう
値型専用のコレクション操作メソッドとか用意されてないかと思って聞いてみた
無限ループって怖くね?(棒読み)
>>610 delegate void RefAction<T>(ref T arg);
static void ForEach<T>(this IList<T> source, RefAction<T> action) {
for (int i = 0; i < source.Count; i++) {
var item = source[i];
action(ref item);
source[i] = item;
}
}
効率は知らん
そんなことするくらいなら、(サイズが確定した時点で)配列にして普通にfor使う方がまし var array = list.ToArray(); for(int i=0; i<array.Length; i++) array[i].x = 10;
>>602 いまさらだけど、
チャンクのサイズを見て、そのサイズ分読む
チャンクのサイズが0なら終わり
という風にしたほうが楽だし速いよ
wavファイルを数値データとして見たいのですがどうすればいいですか?
VC#に、クラスとか関数の関連を表示するナビとかハイパーリンクとかの機能ありますか? いわゆるなんちゃってフローチャート的なやつ
よくわからんが IDE の話か? VisualStudio のクラスビューとかのことかね?
クラス図(クラスとか関数の関連を表示するやつ)と、流れ図(フローチャート)は全く別物だが。 クラスビューにはリンク機能は無いけど。一度使ってみれば。
HSPみたいなもの言ってるのでは
621 :
デフォルトの名無しさん :2010/03/12(金) 17:35:50
フローって作れるか? VC++だったら確か関数の上で右クリックすると関連が見得たりしたけど VC#の場合基本ネームスペース、クラス、メンバ関数とか なのでそんなフローが必要になることってあんまり無いような
TextBoxを普段非表示にしておいて、マウスオーバーで表示されるようにしたいんだけども Hide()使うとイベント受けてくれない 何かいい手はありますか?
表示位置覚えといて親コンテナのマウス移動で表示するかどうか決めるとか?
625 :
デフォルトの名無しさん :2010/03/12(金) 19:31:30
>>624 textboxは透明にするのは難しいんじゃないかな?
なんかこのスレかふらっとC#でバックカラーとかをいじっても透明にできなかった
とか書き込みがあった記憶が
GDI+を使えばいいと思うよ
今日気がついたんだけど、Windows Form上のコントロールのアプリケーション設定 (プロパティバインディングって言った方がいいのかな)ってローカライズに 対応してないのかな。 何が言いたいかというと、FormのLanguageで設定する各言語ごとに プロパティバインディングされたプロパティのデフォルト値を設定する方法がないものかと。 とりあえずリソースと同じようにSettings.settingsをコピーしてSettings.en.settings とかやってみたがダメだった。
>>622 普通に誰でも思いつく泥臭い法でいいんじゃない?
つまりFormのMouseMoveイベントでマウスの座標を監視して、(hideしてある)
TextBoxの場所にマウスポインタが来たらShow()すると。
同じ座標に無地のピクチャーボックスを置いて そっちでイベントを受け取ってみるとか
630 :
622 :2010/03/12(金) 23:35:19
WPFのトンネルイベントみたいなのがあるかと思ったらそんなことはなかったぜ!と言う事かあ 見た目だけじゃなく存在自体が消えてしまうのは何とかならないのかなあ>Hide()
派生クラスで適当に幾つかオーバーライドするだけじゃないの とりあえず、OnPaint, OnMouseEnter(OnMouseHover), OnMouseLeave あたり もしかしたら、OnPaintBackground も必要かも
マウスオーバーでテキストボックス出てくるとか使いにくすぎるw どういう使い道なんだ
>>622 作ってみた。でもかなり対症療法的なコードなのであまり真に受けない方がいいかも。
class TextBoxEx:TextBox
{
private bool SuppressesPaint { get; set; }
private bool mIsTransparent = false;
private bool IsTransparent
{
get { return mIsTransparent; }
set
{
if (value != mIsTransparent)
{
mIsTransparent = value;
if (IsTransparent)
{
SetVisibleCore(false);
SuppressesPaint = true;
SetVisibleCore(true);
}
else
{
SuppressesPaint = false;
SetVisibleCore(false);
SetVisibleCore(true);
}
}
}
}
635 :
634 :2010/03/13(土) 00:32:35
protected override void OnMouseEnter(EventArgs e) { base.OnMouseEnter(e); IsTransparent = false; } protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); IsTransparent = !Focused; } protected override void OnEnter(EventArgs e) { base.OnEnter(e); IsTransparent = false; } protected override void OnLeave(EventArgs e) { base.OnLeave(e); IsTransparent = true; }
636 :
634 :2010/03/13(土) 00:34:10
protected override void WndProc(ref Message m) { const int WM_PAINT = 0x000F; const int WM_NCPAINT = 0x0085; switch (m.Msg) { case WM_PAINT: case WM_NCPAINT: if (SuppressesPaint) return; break; default: break; } base.WndProc(ref m); } } - 以上 -
637 :
634 :2010/03/13(土) 00:50:28
親がアクティブじゃない時の挙動がおかしいな。 コントロール関係はいろいろ面倒臭いなやっぱりw 思いもよらないところに落とし穴が潜んでたりするし。
VC#に最初から入ってるコントロールはイベント処理が微妙なのが多い気がする。 やりたいことがなかなかできなくて、結局自前でフラグ立てながら状態遷移を管理するハメになったり。
639 :
デフォルトの名無しさん :2010/03/13(土) 07:05:42
配列構造体で、 struct vector { public int x; public int y; } private void method{ vector[,] point = new vector[100, 100]; for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { point[i, j].x = i; point[i, j].y = j; } } } private void exchange() { } このプログラムで、exchangeでmethodで定義したpoint[,].xを使いたいですけれども、どうすればいいんだ
無理だろ。引数で渡すとかスコープを変えるとかせんと。
関数の戻値か同じクラス内ならメンバーに持てばいいだろ。 private vector[,] method() { : return point; }
642 :
デフォルトの名無しさん :2010/03/13(土) 11:23:51
それじゃまだ実現不可能。
認識しないからといってインデントに全角スペースを使う男の人って…
2ちゃんねるではよく使うなぁ
全角スペース便利 みんなこれからもどんどん使おうね
むしろ2ちゃんだと先頭の半角とかは無視されなかった?
無視はされない。datでもcgiでもちゃんと残っている
650 :
デフォルトの名無しさん :2010/03/13(土) 13:02:08
2ちゃんビューワとかブラウザで見ると無視されるな
通常WWW UAは連続するホワイトスペースは一つの半角スペースに置き換えて表示するからね こういった利用者が書式を指定できない掲示板では仕方がない
preタグを認識してくれればいいんだけどな
nbsp使えよ
nbsp使ったら、>>レス番 でポップアップしたときに nbspって文字列でてこなかったっけ?
656 :
655 :2010/03/13(土) 16:19:39
でてきませんでした。
test \s \t %89 test test
658 :
デフォルトの名無しさん :2010/03/13(土) 17:44:29
C#4.0も良いけど、C#からC++のクラスや関数をC++/CLIを経由すること なしに簡単に(透過的に)呼び出せるようにしてほしい。 C++/CLIなんていらない。文法がややこしくなるだけだ。VC++は .Net Frameworkと同じインターフェースをもったNativeなGUI ライブラリの開発に専念してほしい。 C++0xが正式に確定していない現在、動きがとれんだろうけど 以上の事をMSがやってくれたらC#を使う気になる。
使わなくていいよ。
>>658 使う気になるとか
C#しか使えない人に失礼だろw
そんなに使いたくないなら使わなければいいのに 他にも選択肢はあるよ
自分の好みやわがままで言語を選べるなんて、ずいぶんと恵まれた職場だな
>662 それなんの社畜自慢?
一生その職場にいて自分だけがメンテするならなんでも選べます
既存のシステムがあったら大きく外れられないだろ というかコンベンションというかガイドラインくらいどこにでもあるだろw
うちはむしろ特別な事情(ユーザーの指定とか旧環境との兼ね合いとか) がないかぎり Windows アプリは C# にするってことにしたけどな
667 :
デフォルトの名無しさん :2010/03/13(土) 18:38:19
制約なければwindowsはc#で書きたいなあ 部分的にC/C++は入れたとしてもGUIはC#だわ
「チッ.NET入れるのかよ」 というお客様も最近は減ってきました
Vista以降で入ってるしね。
とりあえず、意味不明のダイアログを表示して落ちるのもアレなので、 .NETが必要だというメッセージを表示するぐらいの配慮はするべき。
デフォルトで出る様になってなかったっけ? ただ英語なのでアホは読んでくれない
確かにあれはいただけないな
まあバイナリを裸で配布するのは邪道、っていう前提に立ってるんでしょう。 イストーラで配れと。 それにしても、.NET Frameworkは単独でアンインストール可能なわけだから、 そういうケースをもう少し想定すべきとは思うけど。
ちっ、うっせーな
うっ、ちっせーな
C++のクラスとか旧時代のゴミ持ち込むなよ
677 :
デフォルトの名無しさん :2010/03/13(土) 23:54:40
C#もろくに使えねぇ癖に 黙ってろカス
反省してまーす
doxygenもいいぞ
コンボボックスのドロップダウンリスト部で右クリックが押されたことを検知するには どうしたらいいでしょうか? MouseClickやMouseDownで見張っていても呼ばれないようです
そんなマニアックなイベントは無いと思う 一番簡単そうなのはドロップダウン部分のウィンドウハンドルを NativeWindowに食わせることかなぁ ハンドルはGetComboBoxInfoで取れる
2010またソリューションとか変わるんだよな… 2008と混在できるけど、いまやってるプロジェクトまわりのやつは皆が2010に切り替えるまで2010でいじれないよね。 依存関係グラフで見たいのあるけど、なんかうまいやりかたある?
>>682 ドロップダウン部分をサブクラス化してメッセージを自前で処理ですか・・・
ちょっと敷居が高そうですが頑張ってみます
ありがとうございました
そんなアメリカンなUI、使う方にも敷居が高そうだ。
Visual C# ExpressEditionのエディタで、 半角スペースを可視化する設定はありませんか?
>>687 編集→詳細→スペースの表示
ショートカットはCtrl+R→Ctrl+W
>>688 ありがとうございます。
続いて質問ですが、半角スペースと全角スペースを区別する方法はありませんか?
見た目の幅が微妙に違うだけで、一目で判断するのは難しいのですが
>>689 微妙っていっても表示される点の位置がずれるのでそれで区別しかないと思う。
インデントをタブにして普段は半角スペースを入れない方が判りやすいと思うんだけどね。
全角が混ざったかわからないときはプロジェクトで考えるより 普通のテキストとみたてて置換した方が早くない?
全角を気にしないというのはどうか?
開発環境が何かしらないけど スペースの可視化くらいできるだろ
って上に書いてあったか
695 :
689 :2010/03/14(日) 22:36:44
皆様回答ありがとうございます。
>>690-692 辺りを参考に、使い勝手を試しながら使いやすい設定を探していこうと思います。
まあリテラル文字列中以外は、全角スペースは勝手に半角に修正されるんですけどね 違ったっけ。
全角スペースも空白として扱われる、だろう
698 :
622 :2010/03/15(月) 16:17:26
>>634 亀ですがありがとう
参考にさせてもらいます
質問です。 class Data { public int A { get; set; } } PropertyInfo pi = typeof(Data).GetProperty( "A" ); Action<Data, int> setter = (Action<Data, int>)Delegate.CreateDelegate( typeof(Action<Data, int>), pi.GetSetMethod() ); Func<Data, int> getter = (Func<Data, int>)Delegate.CreateDelegate( typeof(Func<Data, int>), pi.GetGetMethod() ); これでsetter、getterを取得できますが、Dataをclassからstructにすると例外になります。 これはBox/Unboxの問題があるからだと思うんですが、EmitやExpressionを使わずに structのプロパティに対するDelegateを取得する方法ってありますか?
エラーメッセージぐらい書けよ boxingとは関係ない問題と見たね
701 :
デフォルトの名無しさん :2010/03/16(火) 21:11:50
Formの上にWebBrowserコンポーネントを貼り付けて、 Webページを読み込む簡易ブラウザを作っています。 ウィンドウ右上の×やAlt+F4等で終了した際に 現在のURLをApplicationExitで取得しようとしたら WebBrowserのリソースが既に開放済みで ObjectDisposedExceptionの例外が出てしまいました。 ApplicationiExitより前にURLを取得出来る イベントハンドラはありますか?
>>701 FormClosingイベント?
それよりWebBrowserのナビゲートが終わったらどこか固定の
stringにURL退避しておけばいいんでないの?
703 :
デフォルトの名無しさん :2010/03/16(火) 21:21:34
>>702 ありがとうございます。JavaのSwingでいう所の
Disposeのようなものでしょうか?
こんな単純な事に気付かなかったとは…。
Process.StartInfo.Arguments プロパティで与えたprocessの引数を、実行時に local codepage に変換しない、あるいは任意のencodingにする方法ってあるのかな?
>>703 WindowListener の windowClosing じゃね?
706 :
699 :2010/03/16(火) 22:08:33
>>700 すみません。
例外が発生するのはDelegate.CreateDelegate()の呼び出し時で、内容は
ArgumentException ターゲット メソッドにバインドしようとしてエラーが発生しました。
です。
ちなみにGetGetMethod()/GetSetMethod()のILを確認してみたところ、classでもstructでも
一緒で下記のような内容でした。
GetGetMethod()
IL_0000: /* 02 | */ ldarg.0
IL_0001: /* 7b | 04000001 */ ldfld Int32 <A>k__BackingField/ConsoleApplication1.Data
IL_0006: /* 0a | */ stloc.0
IL_0007: /* 2b | 00 */ br.s IL_0009
IL_0009: /* 06 | */ ldloc.0
IL_000a: /* 2a | */ ret
GetSetMethod()
IL_0000: /* 02 | */ ldarg.0
IL_0001: /* 03 | */ ldarg.1
IL_0002: /* 7d | 04000001 */ stfld Int32 <A>k__BackingField/ConsoleApplication1.Data
IL_0007: /* 2a | */ ret
レジストリから呼ぶ出すCOMをC#で作ってて Vista以降はセキュリティの関連でアセンブリ登録されたものしか動かないらしいんだけど 本体とは別に外部のプログラムを利用しててこいつはアセンブリ登録したくない独立したものなんだ 本体だけアセンブリ情報をつけてコンパイルしようとすると参照の名前が厳密ではないとかエラーになる VS2005ではラップアセンブリキーってので回避できるって情報を見つけたんだけど 使ってるのがVS2008でどこにもそんな項目が見当たらない こういう場合どうすればいいのでしょう?
>>707 両方に厳密な署名すればいいんじゃないか
多分だが
ひきとるって具体的にどうするんだよw
711 :
デフォルトの名無しさん :2010/03/17(水) 16:26:18
>>709 スルーしてくれ
これは2chやる上では必須スキルだ
>>709 Ruby厨はこうやってそこらじゅうを荒らすから嫌われるんだよ
Ruby厨 = アルミナ
C#はXNAが初心者お断り仕様で助かった
>>714 そうなの? ちょっと興味あるから手出してみようと思ったんだが
XNAはとっつきいいけど奥は深い
717 :
デフォルトの名無しさん :2010/03/17(水) 18:03:05
最大化ボタン、最小化ボタンのどちらが押されたか 判断する方法はありますか?sizeChangedイベントで senderを使うのでしょうか?
厳密にボタンが押されたかどうかなの? 最大化した、最小化したじゃなくて? タイトルバーダブルクリックとかAlt+Spaceからカーソルで選択してEnterとかタスクバーボタンクリックとか 最大化した最小化したならSizeChangedだな 厳密にボタンならイベント公開されてないからWM_NCLBUTTONDOWN辺りを確認することになるかな
XNAも結局コピペだけで 3Dゲーム作れたけどな シェーダーとか凝ったことしようとすると難しいけど それも他人のソース使えばいいし 勉強したのって座標変換だけだったわw
721 :
デフォルトの名無しさん :2010/03/17(水) 18:23:23
コピペでプログラマだと? まあ、モノができりゃ別にいいんだけどな
723 :
デフォルトの名無しさん :2010/03/17(水) 18:26:35
>>718 >>720 そうです。ボタンイベントとして判別したかったのですが、
公開されていないならばsizeChangedイベントで
WindowStateを使ってみようと思います。
よく考えたらそれが定石ですよね…。
>>723 ウィンドウハンドル取得して・・・
というやり方もあるにはある
>>722 XNA は MS がコピペ用のサンプル沢山用意してくれてるから
そこらへんから色々拾ってくるだけでちょっとしたゲームになるよ。
C#でIEコンポーネント使ってFlash使った時、 音声出力を停止させる方法はあるかな? なければ座標指定で停止ボタンをクリックしたのと 同様の事をしようかとw
727 :
デフォルトの名無しさん :2010/03/17(水) 19:02:59
ものすごくタイムリーなあれ用のツールかな
仕事中にエロフラッシュ見てるんですが音が気になって
731 :
デフォルトの名無しさん :2010/03/17(水) 19:08:58
音声停止ってブランクページナビゲートさせればいいじゃん 問題はページ切替の際のSEをどうするかだな
733 :
デフォルトの名無しさん :2010/03/17(水) 19:12:07
そういえばWindowsフォームにFlashビデオとか表示できるように ての無理かな? ブラウザコンポーネント使ってとかじゃない感じ FLV再生させたいけど難しそう
>>732 こんな風に作ってるのか。参考になる。
自分のはまだそっくりそのまま再生するだけw
rtmpdumpとかffmpegも使って録音予約とかしてみたいけど、
その前に公式でアプリ出してくれそうな予感。
> radiko.jpのプレーヤー側で、何らかの録音(保存)機能を提供するというのは、 > 権利者との問題で難しいと思いますね。
らじこにょ
ToolStripMenuItemのコンテキストメニューで選択したアイテムの インデックス(位置情報)を取得出来る?
739 :
707 :2010/03/17(水) 21:31:41
とりあえず呼び出され側のDLLも署名入れてみたらコンパイルは通った 本体C#側にComVisibleをTrueにしてキーを設定したけど regasmを実行してレジストリに入れようとすると 有効な.netアセンブリじゃないとか言われる なんでしょうか?
Yes/Noクイズ?
レジストリには入らないな。
742 :
デフォルトの名無しさん :2010/03/17(水) 21:38:59
プラグイン形式のアプリを作ってるんですが プラグインに変な事をされない様に制限を掛けたいです 例えば ・プラグインのアセンブリは特定のフォルダしか書き込みできない ・レジストリは読み込めない こういった制限を課す方法はあるんでしょうか
無理。
自己解決。こんな感じでコンテキストメニューの入れ子メニューのインデックスを取得できた。 ToolStripMenuItem item = (ToolStripMenuItem)sender; int index = this.stationToolStripMenuItem.DropDownItems.IndexOf(item);
SandBox機能あってもよさそうな気もするんだけどね。
749 :
707 :2010/03/17(水) 22:38:06
自己解決
>742 アセンブリが参照してるもの、Interlop含めて列挙して触らせたくないもの参照してたらアウトとか.
>747 (;゚Д゚)(゚Д゚;(゚Д゚;)ナ、ナンダッテー!!
>>742 System.AddIn(MAF)を使うとか
System.AddInって早くもなかったことにされてるよね MEF使いやすいし
黒歴史はどんどん歴史の彼方に消してくれたほうが助かる ついでにGoogleに引っかからないようになるとうれしい
Managed DirectX XBAP LINQ to SQL System.AddIn
どうせ死臭がしそうなものには手をださんし、おそれず色んなものをだして進化・淘汰させて欲しいな.MSには( ゚Д゚)y─┛~~
WPF もなんか最近・・・ Silverlight で統一でよかった気もする
WPFはいまだにものによってはFormのほうが大幅に軽かったりするところが… よっぽどの例外以外は同等もしくは上回るぐらいでないと使えんよ。客にも使おうとかいえん・・・ 素性はいいと思うんだけどね…
WPFのデバッグ、どこでエラーが起きてるかわからないから困る
WPFの価値はほとんどマネージコードで書かれてることだと思う SilverlightってWPFのインターフェイスをネイティブコードでエミュレートしたような糞実装なんだよね
Silverlightがメインになると思うよ。 もっとも似たようなもんだから両方勉強しててもそんな大変じゃないと思うけど。
実装は置いといて、同じコードでデスクトップクライアントもブラウザ上のクライアントも書けるようにしてほしいよね。 silverlight、WPFのサブセットってわけじゃないのがな。
UI以外はほぼ完全なサブセットだよ UI以外はだけど
単にブラウザーで動かすってのじゃなくて、MacとかLinuxで動くこと考えないとダメだしなぁ。 ブラウザー/デスクトップって分け方じゃなくて、Win機能ガッツり使うかクロスプラットフォーム狙うかな感じが。
Silverlight 4で、out of browser なら COM 呼べたり、 IL レベルでは WPF と完全互換(ソース共有じゃなくて DLL 参照で同じ DLL 読める)だったり、 今後はほんとに WPF と Silverlight 統合されてくかもしれないなぁとか思った。 .NET 入りの Windows 環境での out of browser なら現在の WPF 相当、 それ以外なら現在の Silverlight 相当のアセンブリ参照して動くような。
Silverlight4ではWPFとのアセンブリの互換性は無いよ。 共有したいなら使っていいのはほんとにBCLだけ。XMLや通信すらNG。 UI部分に関しては本当に設計が根本から全く違うので難しい。
ぶっちゃけそれだけ違うならWPFをクライアントアプリとして入れ替えるのは難しいなぁ 銀光と互換があれば使えるのに
ソースコードレベルではだいたいそのままWPFに持ってこられるよ でもアセンブリレベルの互換性となると、一応Silverlight4と.NET4では 可能とはいうものの、参照できるDLLが少なすぎて今のところ現実的じゃない 内部のロジックや汎用的なコントロールだけDLLに分離して ソースレベルで共有するくらいがいいんじゃないかな Silverlightならブラウザとのインタラクションもやりたくなるだろうし
>>ブラウザとのインタラクション これって知らない言葉だけどどういうことなんですか?
ユーザにアプリケーション設定を弄らせたくなかったら app.configに値を全部設定するのがいいのかな?
「ユーザにアプリケーション設定を弄らせる」の定義次第だな
>>770 SilverlightからWebページのDOMやスクリプトを操作したり
逆にスクリプトからSilverlight操作したり
NotifyIconのMouseClickとMouseDoubleClickのイベントハンドラを 2つ登録させてダブルクリックすると両方のイベントが実行されてしまう。 これを回避する手段ある?
判断しようもない クリックイベントの発生をダブルクリック受け付け時間終了まで待つ?
どちらかあきらめるしかないんじゃね?
即レスどうも。右クリックと左クリックを同じコンテキストメニュー表示してるから MouseClickイベントは捨てようと思う。
779 :
デフォルトの名無しさん :2010/03/19(金) 03:56:16
それは作りが悪すぎだろ
>>779 ごめん。言い間違えた。
MouseClickイベントは残すけど、右クリック時だけ
コンテキストメニュー表示するように修正する。
任意のWebサイトにあるjavascriptの関数を呼び出す方法って InvokeScriptというのを使えばいいの?
まあ基本的には
>>782 C#からHTMLを読み込んで、その中で定義された
javascriptの関数を実行する場合は下記のような感じなの?
これで実行するとobjにnullが返ってくる。
// C#
WebBrowser web = new WebBrowser();
web.Navigate("
http://test.com/index.html ");
Object obj = web.Document.InvokeScript("hoge");
// index.htmlファイル
<html>
<script type="text/javascript" src="hoge.js"></script>
</html>
// hoge.jsファイル
var hoge = function() {
何かの処理
}
> // hoge.jsファイル > var hoge = function() { > 何かの処理 > } これ無名メソッドオブジェクトの変数hogeを作成してるだけ C#でいうと var hoge = new Action(() => { 何かの処理 }); でしかなくて、返す値も存在してない
UNCパスをローカルパスに変換する方法を教えてください・・・。 現在製作しているプログラムで、指定したフォルダに新しくフォルダを追加する処理があります。 ここでサーバのフォルダをUNCパス形式で指定した場合、フォルダ作成時に例外が発生してしまうのです。 よろしくお願いします・・・。
Directory.CreateDirectoryとかは普通にUNCパスにも対応してるが?
>>784 どうも。あとjavascriptファイルにグローバル宣言された変数を
参照する事は出来る?
>>787 グローバル変数って言ってもwindowオブジェクトにくっ付いてるのでそこから参照すればいいんじゃない?
http://pub.ne.jp/arayan/?entry_id=2277623 これ参考にして(というかほとんどまんま)ツイッター投稿アプリ作ってるんだけど
// 投稿内容をURLエンコードする。
string encMes = System.Web.HttpUtility.UrlEncode(mes);
のところでHttpUtilityがエラーになる。
型または名前空間名 'HttpUtility' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。
と出るのだけれど、System.Webの中にないって開発環境が悪いのかな・・・
あーすいません解決しました!
791 :
デフォルトの名無しさん :2010/03/20(土) 03:18:39
参照設定してないだけだな
>>788 取得方法がさっぱり分からなかった。
InvokerMember使うのかな?
793 :
726 :2010/03/20(土) 05:52:29
794 :
726 :2010/03/20(土) 06:08:06
radikoのリンクされてないページを見まくってるせいか、 色々な所にガードかけられて見れなくなったりとか。
795 :
デフォルトの名無しさん :2010/03/20(土) 06:11:50
>>794 サーバー側が要求ヘッダをちゃんと見るようになってるかもね
まあそのヘッダの中身も公式のjsみれば載ってるのであれなんだがw
796 :
726 :2010/03/20(土) 06:27:37
>>795 トップページのソース見てjsとかcssをたどって行くと面白いね。
あと下のURLは明らかに開発者用ページだったけどもう見れない。
http://radiko.jp/epg/epgapi.php アップしたアプリはバグだらけだな…。停止して表示したらブランクページが
表示されちゃってるし。Flashが制御出来ないからブランクページに
飛ばして音声停止させてるのがバレバレw
テキストボックス等の文字数が設定した文字数以上だったら上限分までの文字列を扱いたいのですが・・ たとえばlengthが90以上だったら勝手に1文字目から90文字までの文字列に減らして表示させたりとか。 わかりにくかったらごめんなさい。しらべても単なるMaxlengthしかでてこなくて
ほんとにわかりにくい
801 :
726 :2010/03/20(土) 07:00:59
>>799 表示内容は公式サイトそのままなんですけど…
>>793 なんかオシャレだ!!!
FA系がメインだからこういうオシャレな外観のやつ作りてぇ・・・
テスト版だから動かないのかもしれないけど
起動したらエラーが出たのでとりあえず
---------------------------
Web ページからのメッセージ
---------------------------
エラーが発生したため音声が再生できません
---------------------------
OK
---------------------------
これが表示されたよ
803 :
デフォルトの名無しさん :2010/03/20(土) 08:37:17
>エラーが発生したため音声が再生できません メッセージボックスの表示ならエリア外と判断されてる 公式トップの左上のロゴの下にエリア表示があるので 確認してみ
>>803 ありがとう
確認したら地域外じゃねぇかorz
田舎すぎてわらえねぇ・・・・
あとエリア外のエラーメッセージボックスが出た後、
再生状態で最小化させて右クリックで放送局とかのチェックいじりまわってたらこんなの出た
放送局を現在の選択と同じものクリックしたりしてたらなりやすいみたい
発生するときはチェック変更後 放送局のサブメニュー表示させようとする時
System.IndexOutOfRangeException: インデックスが配列の境界外です。
場所 WindowsFormsApplication.RadikalPlayer.stationToolStripMenuItem_Click(Object sender, EventArgs e)
場所 System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
場所 System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
場所 System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
場所 System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
場所 System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
場所 System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
場所 System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
場所 System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
場所 System.Windows.Forms.ToolStrip.WndProc(Message& m)
場所 System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
メッセージはハンドルされてない例外の時の 詳細とかが出るやつ
805 :
726 :2010/03/20(土) 09:04:07
>>802-804 わざわざ報告ありがとう。そしてスレ汚して申し訳ない。
地域外の場合は漏れなく関東地区に設定してしまってるから、
予期しない動きする。本来ガードかけるべき所だよね…。
806 :
デフォルトの名無しさん :2010/03/20(土) 09:07:08
こういうツールは公式で出してくれるのが一番なんだけどなw エリア判定を嫌ってか1分くらい鯖が応答しなくてタイムアウトになるとか 改変されるからツール作る側は要らぬアップデートしないといけないしな
あぁActiveReport位使い勝手がよくて無料のツールがほしい・・・ 動的にFetch行の高さが変えられてページからはみ出るときは次のページに出してくれるツールってないのかねぇ… 帳票.netは良さそうだけどそれができなうっぽいのが唯一の悩み
808 :
785 :2010/03/20(土) 22:01:41
>>786 それが「アクセスが許可されていません」とか言う例外が発生して作成できないのです。
自分のPCに共有フォルダを作成し、そのフォルダに対してUNCパスで実行した場合にエラーが発生します。
【\\host名\C$\〜〜〜】という書き方や、ローカルパスなら大丈夫なんですが・・・。
権限がないだけじゃないの? cacls/icaclsとか使って権限調べてみた?
単純に dir > \\UNCPATH\test.out してみればいい。
メッセージボックス出してOK押したら Form1が表示されちゃうんだけど どうすれば終了出来るの? 代わりにDisposeすると例外が出る。 namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); MessageBox.Show("test", "tset"); Application.Exit(); } } }
何がしたいんだよ。
>>813 何時間2ちゃんにかぶりついているんだ?
そろそろ死ねよ
>>812 Application.Run()する前にApplication.Exit()しても意味ないから。
Ruby最強
>>815 言われてみればそのような。もう少し調べてみる。
>>818 そのForm1はどうやって呼ばれてるんだ?
SubMainからApplicationRun(New Form1()) みたく呼ばれてるの?
>>819 Program.csという所にこう書いてある。
何もいじってないけど。
namespace WindowsFormsApplication
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Application.Run する前にメッセージボックス出せばいいじゃん。
変数の値が変更されたら 自動でform.Textの値を変更してくれるのは どう書けばいいの?
お前まだいたのかwwwwww
向こうはバカばっかりで答えてくれないのでこっちにきた こっちの人ならすぐに答えられるでしょ? ではよろしく
828 :
デフォルトの名無しさん :2010/03/21(日) 00:30:00
>827 バカ呼ばわりする前に他人がわかるような質問にする努力をしなよ 回答する人はエスパーじゃないから
>>824 例えばこんな感じ
private in index=0;
indexが変更されるとその値を表示したいんだけど
どうすればいいかわからない
TextChangeイベントみたいなのが作れたラインだけど
まだわからなかったのかよw
private in 突っ込むべきなのか悩む微妙なミスw
public int Index { set { _index = value; hoge(); } } private int _index =0; private void hoge() { MessageBox.Show(_index.ToString()); } _indexを書き換えるときは private void Test() { this.Index = 5; } 簡単にしようと思ったらこんなんとか?
>>833 それをイベントでやりたいんです
もっといろんな場面で使える汎用的なものを作りたいので
デリゲとか難しく考えずに適当にevent作って raiseさせたらいいじゃん
プロパティで表現しようとする人が多いけど そういうのって一般的なやり方なんですか? 私は独学でやってるだけなので 他の人がどうやってるか知りませんけど プロパティって使い勝手は確かにいいけど 本来そういう使い方をするためにあるわけじゃないし
>>835 それがわからないんですよね
TextChangedイベントがどういう風に実行されているのか
それが知りたいんですけど
>>836 プロパティの用途はさまざまです。
(中略)
データが変更されたときに、イベントを発行したり
他のフィールド値を変更したりするなど、アクションを実行できます。
Loadイベントでやるといい。
うお誤爆。
>>839 ありがとうございます
それの呼び出し側のクラスがどう書けばいいかわからない
何がどうなってるのか・・・ほんと難しい
こんな感じで呼び出すんですか?わかりません
frm1.IndexChanged += new sampleDelegate(object sender,int idx);
>>839 これはもちろんINotifyPropertyChangedでやれって皮肉だよね
>>843 お話に並んだろ
ほとんど知らないにしても話にならん
1〜10まで話さないと判らんやつは初心者スレへいけ
どこかにイベントやデリゲートの例がたくさん載っているとこないですか? どこも一部の使い方しか載ってなくて そもそもイベントやデリゲートでどういう構文が書けるのかがわからない OnIndexChanged この変数の名前にOnをつけたのはなぜですか? 理由があると思うんだけどそういうことを細かく説明しているところないでしょうか?
>>845 初心者スレは基地外しかいないので話にならないんです
おまえ自覚ないのか
荒らしの相手するなよ
>>846 OnでもInでもAtでもいい。意味がわかるならな。
なんで1:50で急に終わったのか?
OnIndexChangedて変数名じゃないでしょ。 慣例的にはインデックスの変更通知を発生させるメソッド名だよね。
+=であたかも代入しているように見えたから勘違いしたんじゃね
857 :
デフォルトの名無しさん :2010/03/21(日) 16:32:42
まずCOMを学びます
まず、dumpbinとかDependency Walkerとか使って、 ちゃんと関数がエクスポートされてるか確認しよう。
dumpbin /exports hoge.dll で調べてみるのが基本。
extern "C" が無いのが怪しいな。
.def に @1 とかいらないんだっけ?
defを使うのをやめて、 extern "C" { __declspec(dllexport) int __stdcall MyFunc(){ } } としました。dumpbinで確認したところ以下のようになりました。 1 0 000110A0 _MyFunc@0 = @ILT+155(_MyMbox2@0) C#側 [DllImport("Mydll",EntryPoint="MyFunc")] public static extern int MyFunc();として呼び出すと無事成功しました。しかし、エントリポイントを 書かないとうまくいきません。これはなぜですか?
VS2008+.net3.5だとEntryPointはいらないようだが、何を使ってます?
865 :
デフォルトの名無しさん :2010/03/21(日) 17:13:36
>>862 以外にほかにも書いてるところあるのでいろいろ見て回った方がいいんじゃね?
VC++側では.netは使ってません。ちなみに2008EEです。 VC#のほうは2008EE .net 3.5です。 今関数で実験してたんですが、本当はクラスを呼び出したいんですよね・・・ この方法じゃできないですよね?ラッパー?とかしないといけない?
クラスは無理。クラスのメソッドをエクスポートする形にしないと。
868 :
デフォルトの名無しさん :2010/03/21(日) 17:30:53
>>866 クラスライブラリじゃだめなの?
まあ難読化しても中身みえちゃうけど
チョイ長いけど、P/InvokeでC++クラスの使用。 .ThisCallやnew/delete用のファクトリやデファクトリも必要になる。 [DllImport("test4s.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl, EntryPoint = "?getInstance@Hello@@SAPAV1@XZ")] public static extern IntPtr getInstance(); [DllImport("test4s.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.ThisCall, EntryPoint = "?free@Hello@@QAEXXZ")] public static extern void free(IntPtr ts); [DllImport("test4s.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.ThisCall, EntryPoint = "?say@Hello@@QAEXXZ")] public static extern void say(IntPtr ts); [DllImport("test4s.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.ThisCall, EntryPoint = "?setName@Hello@@QAEXPBD@Z")] public static extern void setName(IntPtr ts, string name); [DllImport("test4s.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.ThisCall, EntryPoint = "?getName@Hello@@QAEPBDXZ")] public static extern string getName(IntPtr ts); static void Main() { IntPtr h = getInstance(); setName(h, "KAMEHAMEHA"); say(h); Console.WriteLine(getName(h)); free(h); }
普通はC++/CLIでラッパーを作るかCOMにするかだね。
P/Invokeなラッパーもありだよ。
どれが一番楽ですか? 元のネイティブコードの保守がしやすい方法がよいのですが
自分で考えろ。
>>872 発想を変えてdllじゃなくて独立したサービスとして動く物にして
httpなどで通信するとかw
スケーラビリティありそうだな
IISでサービスをホストするのもありだな。 エンタープライズ・アプリケーションっぽくなるぞw
877 :
デフォルトの名無しさん :2010/03/21(日) 18:43:04
今となってはVC++でGUIは書きたくないしねえ 余力があればwebサーバーぽく動的にhtmlを吐き出すようなモードも 搭載すれば最悪ブラウザから使える
そもそもC#でDLLを作ればいいじゃん・・・という話ではないの? 856ではC++でDLLを作りましたとあるが,既にあるC++のDLLを利用したいの?
そのためのC++/CLIだろう
880 :
デフォルトの名無しさん :2010/03/21(日) 18:50:49
>>878 C++でDLLっていうからには速度、過去の資産の活用、コード隠匿だろうからねえ
クラスライブラリだとどうしてもってことじゃないの?
しかし,今までの話の流れからはレスポンスとかセキュリティとか・・・ そういったクリティカルな事情は読み取れないんだよな.
WaveOutOpenとかのマルチメディア系の処理を行っていたC++のアプリの GUIのパワーアップを行いたくて・・・ VC++だといろいろGUI周りがめんどくさいので、C#に意向したいという意図があるんです
C#で書いたGUI ↓↑ httpを返すローカルアプリ ↓↑ よくわからんけどdll
C++で既存のソースがあるなら、C++/CLI一択だろ。
885 :
デフォルトの名無しさん :2010/03/21(日) 19:15:12
C++/CLIってメリットがさっぱりわからん
おれならP/Invokeかなぁ。
>>885 C++/CLI と比べて C# のメリットが説明できるなら C# 使えばいい。
どっちも優劣つけれないなら、どっちつかっても一緒。
PictureBoxのMouseUpイベントの中で PictureBox.Imageとリソースに埋め込んだ画像(test)を 比較する方法は↓だと駄目なの? PictureBox pic = (PictureBox)sender; if(pic.Image == Properties.Resources.test){ }
CLRのリソースの画像は取得のたびに新しいインスタンスを作っているので一致しない。 Win32のリソースとは動作が異なる。
>>889 そうなんだ…。そうするとタグ情報か何かで識別するしかないか。
PictureBox.Imageでリソースのタグ情報取得出来る?
PropertyItemsとかで取得できるけど 普通にResources.testをどっかにキャッシュしとけばいいと思う
>>891 PropertiesItemsはIDが必要みたいで面倒なので、
保持しておく方法で実装してみる。
893 :
デフォルトの名無しさん :2010/03/21(日) 21:57:32
これからプログラミングを始めたいのですが、C#は最初に学習する言語としてオススメでしょうか? やはりCやC++から学び始めた方がいいかな、とも思うんですがどうでしょう・・・。 最終的に作りたいのはネットゲームですが、これは本当に何年も後のことで、目先には考えていません。
>>893 c#で初めてみるのもいいんじゃないかな?
c#って書きやすいのでC/C++も勉強したいたなc#で書いたコード
をC/C++で実現するにはどうすればいいか・・・で学習するのも手
ネットゲームが目標ならネットワークの知識も居るし専ブラでも作ってみるとか
初心者向けの情報量でいえばJavaだな JavaできればC#はすぐできるしC/C++も馴染みやすい C#はJavaやC++から移行する人のための言語なので微妙
>C/C++も勉強したいたな C/C++も勉強したい場合は
JavaならC#の方が最初は楽だと思う。
C++ は必要になったらやればいい。 C は C# でつまづいたときにやるといい。 俺的にはおすすめ。
オブジェクト指向とか体系的に学ぶにはJavaの方がレールが整ってていいと思うけど C#の方が目に見えるものが簡単に作れるので飽きにくいかも
900 :
デフォルトの名無しさん :2010/03/21(日) 22:07:02
>>894-899 ありがとうございました。
意見として一番多いのはC#ですね。
Javaという意見もとても興味深いのですが、反対意見もありますし、C#から初めてみようと思います。
どの言語から始めた方がいいか・・・と言う議論は、色んなところで色んな議論が行われても結論を出すのが難しいことなので、実際にやってみて自分が思う答えを見つけます。
だってC#スレだし。
普通の人はC++じゃなければダメという状況には出くわさないな
JavaとC#はほとんど同じでどちらかできれば両方できるからあえてC#スレでJavaを勧める意味はあまり無いし C++が嫌だからC#があるんだからC#スレでC++を勧めるわけがないし
そこでF#
文法とか基本的なデータ構造レベルはかなり似通ってるから Java 先でも C# 先でも両方そこそこ書けるようにはなるよね。 ただ実際に何か作ろうってなると .NET とか Spring とかフレームワークの知識が主体になってくるからなぁ。
.NETはフレームワークなんて呼べるもんじゃないけどな。
907 :
デフォルトの名無しさん :2010/03/21(日) 22:28:25
>>905 Cのころはよく使うアルゴリズムをいろいろ知ってて自前で実装するか
他所から借りてくるかだったけど、最近はフレームワークという道具というか部品の
使い方をどれだけ知ってるかだからねえ
908 :
デフォルトの名無しさん :2010/03/21(日) 22:30:55
昔と違ってソートのアルゴリズムが何で実装されるかとか気にしなくなったな だってSort()しかないしね!
自前で実装すると大概遅いしな。 あと最近思うのは、作ろうと思ったものって大概誰かが実装してるという。 これは結構悲しい。
910 :
デフォルトの名無しさん :2010/03/21(日) 22:41:35
treeviewのNodeMouseClickイベントでノードが選択されたかどうかって確認した方がいいの? もしそうならsenderもしくはeで渡ってきた情報で知ることが可能?
>>910 正直そのイベントは使ったことないな
大抵AfterSelectかBeforeSelectで片が付く
可能かどうかぐらいはまずイベント引数のメンバ確認しようぜー
>>908 中身クイックソートだし安定ソートが欲しいと思うことはたまにあるよ。
>>914 EnumerableのOrderByが安定ソート
>>915 おお、今度安定ソートが欲しくなったらこれ使うよ。
以前安定ソートが欲しかったときのコードは.NET1.1だったので置き換えようがないけどね。
IListに対する破壊的ソートが欲しい今日この頃
var tmp = list.OrderBy(x => x).ToArray(); list.Clear(); list.AddRange(tmp); くらいか
次スレは58か? それとこのスレはふらっとからの流用だからテンプレ注意
次は58だと思うけど、もっと前から狂ってたら分からない。 Part55、実質56のPart55、実質56の重複のPart55(重複理由で削除済み)、実質57のPart55(ここ) と4種類のPart55があった。
デスクトップの位置を保存するためにリソースを使って下記のように実装したのですが、 ※の箇所でFormが一瞬デスクトップ座標(0, 0)に表示されて終了してしまいます。 ※の行を消すとその位置でウィンドウが消えるのですが、他の箇所のコーディングを 見直した方がいいでしょうか? private void Form_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.FormLocation = this.DesktopLocation; // ※ Properties.Settings.Default.Save(); }
何故なのか不明ですが、※の行が無くても位置が保存されてました…。 Properties.Settings.Default.FormLocationの値がthis.DesktopLocationを 代入する前から同じ値になっていました。
924 :
デフォルトの名無しさん :2010/03/22(月) 15:48:28
質問です。 // こういう親クラスがあるとします。 abstract class SomeClass { private SomeComponent someComponent; // これへの setter は作りたくない、コンストラクト時に受け取りたい protected SomeClass(SomeComponent s) { this.someComponent = s; } } // この親クラスが使っている SomeComponent を継承した DerivedComponent というクラスがあるとする。 // 親クラスを継承した子クラスでは DerivedComponent だけに定義されたメソッド等を使いたいので、子クラスでは DerivedComponent 型としてのメンバーを持つ // コンパイルが通らない(1) class SomeDerivedClass { private DerivedComponent derivedComponent = new DerivedComponent(); public SomeDerivedClass() : base(this.derivedComponent) { // コンストラクトの順番的に初期化子を使ったメンバを渡すのは無理らしい事がわかった。 } } // コンパイルが通らない(2) class SomeDerivedClass { private DerivedComponent derivedComponent; public SomeDerivedClass() : base(this.derivedComponent = new DerivedComponent()) { // 別に初期化子を使わなくても、そもそもメンバを渡すのが無理らしいとわかった。 } } // これはコンパイルは通るけど嫌 class SomeDerivedClass { private DerivedComponent derivedComponent; public SomeDerivedClass() : base(new SomeDerivedComponent()) { this.derivedComponent = (DerivedComponent)base.someComponent; // ここでキャストしなくちゃいけないのが嫌だ。 } } 何かいい書き方はないでしょうか?
// これはコンパイルは通るけど嫌 class SomeDerivedClass { private DerivedComponent derivedComponent; public SomeDerivedClass(DerivedComponent derivedComponent) : base(derivedComponent) { this.derivedComponent = (DerivedComponent)base.someComponent; // ここでキャストしなくちゃいけないのが嫌だ。 } }
間違えて送信した class SomeDerivedClass { private DerivedComponent derivedComponent; public SomeDerivedClass(DerivedComponent derivedComponent) : base(derivedComponent) { this.derivedComponent = derivedComponent; }
class SomeDerivedClass { private DerivedComponent derivedComponent { get { return (DerivedComponent)base.SomeComponent; } } } フィールドに持つ必要がないという考え方
class Program { static void Main(string[] args) { SomeDerivedClass derivedClass = new SomeDerivedClass(new DerivedComponent()); } } abstract class SomeClass { private SomeComponent someComponent; protected SomeClass(SomeComponent s) { this.someComponent = s; } } class SomeDerivedClass : SomeClass { private DerivedComponent derivedComponent = new DerivedComponent(); public SomeDerivedClass(DerivedComponent derivedComponent) : base(derivedComponent) { this.derivedComponent = derivedComponent; } } public class SomeComponent { } public class DerivedComponent : SomeComponent { }
>// これはコンパイルは通るけど嫌 >// ここでキャストしなくちゃいけないのが嫌だ。 何がどう嫌でコンパイラに逆らって、そして何がしたいのか・・・ サッパリ理解できない。
930 :
924 :2010/03/22(月) 16:31:07
>>925-928 ありがとう。
>>926 の方式を見落としてた。
>>926 方式で更にコンストラクタを protected にして、代わりに public static なインスタンス生成メソッドを作る事にした。
サンクスサンクス。
931 :
924 :2010/03/22(月) 16:37:14
>>929 SomeClass の実装内容が
コンストラクタで受け取った物そのものじゃないオブジェクトを getter で返すようになったりしたら InvalidCastException 投げるようになってしまう事。
考えられる例として、SomeClass が受け取った SomeComponent を wrapper とか decorator で包んで保持するように変更される可能性などがある。
932 :
929 :2010/03/22(月) 16:42:09
933 :
924 :2010/03/22(月) 17:44:35
ミックスインでやるようなことを継承で実現しようとしてグダグダになってる感じだね。
自作自演かと思ってたよw
まあ普通にやるとこんなんかねー class Derived { public Derived() : this(new DerivedComponent()) { } private Derived(DerivedComponent component) : base(component) { this.component = component; } }
938 :
929 :2010/03/22(月) 20:18:02
もし仕事でC#プログラミングするなら、多段継承や多重継承っぽいことは避けた方がいいよ〜。 きちんとしたクラス設計を飛ばしてコーディングすることも、要らない継承を増やしてしまう原因だ。 多重継承は、複雑な継承関係でそのプログラマ本人以外にはメンテ不能なコードを実現する、 テロの道具になり得るのは良く知られているよね。 実際テロじゃなくても、半年経ったら本人もメンテできなくなって、上司や客先の下で拉致監禁。 そして廃人になったり自殺とか・・・。少し前のC++プログラマには多かったと聞く。 コーディング規約で制約を設けないと高品質なプログラムが生まれないということで、Javaでも 非推奨になったし。 C++は放置でSE/PGの自殺or廃人化も歓迎な野良言語でいいと思うw
でも既存コントロールをベースにカスタマイズしていこうとすると多重継承ないのが困る インターフェースだといちいち同じ事書かないとならんし
940 :
デフォルトの名無しさん :2010/03/22(月) 20:35:36
>>939 コンストラクターで多重継承できなかったやつのインスタンスを作って
それをpublicで公開しちゃうとか?
.を一つはさむけど
それは無いだろw
カスタムコントロールなんて散々作ってるけど、 多重継承があったらいいのになんて思ったこと一度もないぞ。 どんなことやろうとしたらそんな風に思うんだろう。
943 :
デフォルトの名無しさん :2010/03/22(月) 20:41:42
わがままだな
>>942 たまーにあるけどね
これとこれを継承したいなあ・・・とか
>>940 むしろそのインスタンスはprivateにして
必要最小限のメソッドだけ外側のクラスに宣言して公開するようにしておけ。
>>937 System.Diagnostics.Process.Start じゃダメ?
>>924 のabstract classの他のメンバーが書いて無いからどの方法がベストかは分からないが、
interfaceか包含かどちらかで良いように思う。
それより同じものを2重に持つほうがよほど汚いと思うけどな。
private SomeComponent someComponent
private DerivedComponent derivedComponent
次スレのテンプレで下記入れておいて
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://codepad.org/ コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。
2130分ごろ立てます
>>946 ターゲットとなるURLが取得出来れば引数に渡すだけでいいんだけど、
そのURLがどうしても抽出出来なくて。
>>944 男性クラスと女性クラスからの継承とか?
しかし多重継承って、多重人格なオブジェクトを生成するためのようなクラスだぜ?
使い方も無制限だし、実務じゃ危なくて使えねーよw 所詮は学者の産物。
ロールという概念を知らないのですね
〜able を実装で、必要であれば 〜Impl を委譲するってやり方が好き。
954 :
デフォルトの名無しさん :2010/03/22(月) 21:21:49
>>952 人格や法人格などの「格」はユニークだから、ロールという多面性はクラスの
多重継承では実現しないアプローチです。使うのはインターフェースかな。
オブジェクト指向キチガイにスレが乗っ取られますた。
理論はいいからコードで示せよw
エンドレス55は8回続くと思っていたのでPart58が建ったのはめでたい
お前らプログラマなのに数字に弱くてどうするんだよ
お前もプログラマならわかると思うが数字に弱くてもギリギリなんとかなる
0,1,n うーむ、これは指三本で足りると言っていいか?
2bitだから2本だろ ほんと数字弱いな
実は数学関係の作業では全く計算能力は使わないから退化するんだよ・・・ 式とかプログラムをこね回すだけで終わるから。
Graphics g = Graphics.FromImage(bmp); Matrix mat = new Matrix(); float xScale = (float)((float)bmp.Width / (float)data.Length); float yScale = (float)(bmp.Height - 1) / 65535.0f; mat.Scale(xScale, -yScale); mat.Translate(0, bmp.Height / 2, MatrixOrder.Append);//平行移動 g.Transform = mat; 波形データを表示するプログラムの一部です。mat.Scaleがどういう処理をしているのかわかりません。 これをするとどういう効果があるのですか?
座標変換
普通に行列の大きさ成分を変更してるんじゃないの ?
スケーラだから描画領域に収まるようにしてくれてるんだろう 比率計算してるし
971 :
デフォルトの名無しさん :2010/03/22(月) 23:56:01
下手すれば内部でゲームで呼ぶようなライブラリに渡してるだけかもね 3Dやってるとその辺は普通にみるし
この変換したgでDrawLinesをこの後実行します。 この処理が行われてるのはwaveのデータをプロットするプログラムです。 すべての点が描画領域にプロットできるように、この処理を行っているんですよね。 DrawLinesの処理としてはどうなるんでしょうか?すべての点を描画するわけじゃないんですか?
PictureBoxのMouseEnterイベントハンドラーの中でToolTip.Show()を実行すると ハンドラの中で更にハンドラが呼ばれてスタックオーバーフローになる。 どうやって対処すればいい?
>>972 何を聞きたいのかもう少し明確にした方が良くない?
>>973 MouseEnterで表示するのなら、単純にSetToolTipしとけば済むのでは?
まあ何か事情があるのならMouseMoveで代替するとか。
RichTextBoxの特定文字列を四角で囲みたいんだけども何かいい方法無い? フォントいじるのではダメっぽいし、上にPictureBox重ねるとRichTextBoxが見えない
976 :
785 :2010/03/23(火) 00:28:19
返信が遅れてしまい、申し訳ありません。
>>809 UNCパスで失敗しても、「\\host名\C$\〜〜」といった記述なら成功するのは何かしら理由があるのでしょうか。
現在その方法で権限を確認することができないので、何か心当たりがあれば教えていただきたいです。
>>810 プログラム内でコンソールを呼び出して、直接ディレクトリを作成するということでしょうか。
確かにそれなら確実に動作しそうですね。
977 :
デフォルトの名無しさん :2010/03/23(火) 00:30:03
>>975 RichTextBoxをキャプチャして・・・とかはだめ?
978 :
972 :2010/03/23(火) 00:35:06
各ピクセルの位置が x 軸方向に xscale倍に変更されるわけですよね? そんな処理ってできるんですか? xscale=0.5なら (5,10)が(2.5,10)となるわけですよね。2.5という場所はどこなんでしょうか。整数なら納得いくんですが
979 :
デフォルトの名無しさん :2010/03/23(火) 00:37:57
>>978 その前に自分で書いたようなコードじゃなさそうなので
ネットで拾ったのなら入手先教えてくれ
動かしてみればアドバイスできるけど・・・ってのもいるだろうし
>>977 OnPaint引っかけて、ってやり方?
ググってみると上手く動かないっぽいんだけど・・・
>>976 \\ホスト名\ドライブ名$\〜 は「管理共有」と言う
詳しくはググレ
>>975 思いつきだけど、Ritch Textは一応表組に対応してるから、
セルが1つだけ(つまり1×1)の表に文字を入れるとかね。
まあ、それだと多分囲った文字はインラインにできないと思うけど。
983 :
デフォルトの名無しさん :2010/03/23(火) 00:49:13
表示だけだったらブラウザにやらせた方がいいかもしれん 表現力は半端じゃない
>>982 うーん・・・結構頻繁に囲う部分が変わるのでそれはちょっと
使い所によっては面白いアイディアかもだけど、今回はちょっと使えないかな
ワードでリッチテキストを開いて文字を囲って修飾しても、ワード上では表示されても 同じファイルをワードパッドで開いても表示されないから、多分リッチテキストそのものには そういう機能は存在しないんだろうねえ。 合成文字とかいう機能は使えるのかなあと無責任に言ってみる
>>974 遅くなったけどありがとう。無事普通にツールチップが表示出来た。
>>985 罫線系は合成できなかった記憶があるから使えないんでない?
きちんと調べてないけどさ
RichTextBox は RichTextBox でも WPF 使うという 回答は駄目?
コンパイラ名とバージョン: (Visual C#) 作業用フォルダの所は空白、ソースと同じフォルダにショートカットは有ります。 ショートカット「Visual Studio 2005」 から csc xxx.cs するのが面倒な場合はどのようにするのでしょうか。 PATHをずらっと並べるのは無しで.batのみで可能でしょうか?
よくわからんけどMSBUILD
>>988 現WPFはフォント周りがアレなのでダメです
>>989 よくわからないけどコマンドプロンプトじゃなくて?
コマンドプロンプトから msbuild プロジェクトファイル.csproj とかすればビルドできる 細かい引数の指定の仕方は忘れた
カレントディレクトリにショートカットまたは.batをおいて置く⇒
クリックまたはEnterでコンパイル&ビルド
またはPATHを並べてファイルをドラッグすればコンパイル
>>991 >>992 >>993 有難うございます。
995 :
785 :2010/03/23(火) 22:33:08
UNCパスの変換と、ディレクトリの作成について質問していた者です。 本日実際の環境で調べてみたところ、作成の権限が無かったようです。 フォルダ自体の権限だけでなく、共有についての権限も設定する必要があるのですね。 無事、正常に動作するようになりました。 助言を下さった方、ありがとうございました。
ふらっとC#スレのほうでスルーされてしまったのでこちらで質問します Cでいうところのfscanf (fp, "%s%lf%lf", name,&height, &weight)みたいに構造体でtxtファイルにデータの管理をするには どうすればいいでしょうか? 今思いつくのはstring型を特定の文字で引っ付けたり分解するを利用すること位です 又もし釣りだと思われるような要素や、スレ違いだったりするのならどうだめなのか教えてください。
>>996 思っている通り Split とかで分割するか、正規表現を使うかじゃね?
無視っていうか座談も含めて流れた可能性が・・・ 俺もあったのは知ってたけど初心者なので詳しくないから他の人の様子見だったんだよねw で、本題だけどあるのかな・・? c#なら構造体じゃなくクラスの中身をそのまま保存したり復元できる XmlSerializerってのもあるけど
xmlでいい
>座談 雑談
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。