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

C#, C♯, C#相談室 Part42

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/08/26(日) 12:42:25
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part41
http://pc11.2ch.net/test/read.cgi/tech/1184840053/

過去スレは>>2-5あたり。
0488デフォルトの名無しさん2007/09/08(土) 13:37:18
>>487
デフォルトだとValueType.Equalsが使われる。

ValueType.Equalsだが、プリミティブ型のみから構成される構造体なら
ビット比較を使うっぽい。

参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。
これが遅いと言われている。

http://pc11.2ch.net/test/read.cgi/tech/1173763436/161-185
0489デフォルトの名無しさん2007/09/08(土) 13:41:43
>>488
>参照型を含んでいたりするとリフレクションでメンバごとに再帰比較してる模様。

いまのCLRならその部分をLCGで実行時生成して
キャッシュしておくこともできそうだな。

キャッシュの寿命管理が面倒そうだけど、
直近の16エントリぐらい保持しておけばそこそこヒットしそうだ。
0490デフォルトの名無しさん2007/09/08(土) 14:01:32
素直に IEqualityComparer 実装しようよ
0491デフォルトの名無しさん2007/09/08(土) 14:09:10
自作の構造体なら、わざわざDictionaryなんかに頼らなくても
自分とペアになるオブジェクトをプロパティで持たせた方が簡単で早いじゃん。


・・・・・・と俺は思っちゃうんだが、これってやっぱり単細胞過ぎる発想かな。
0492デフォルトの名無しさん2007/09/08(土) 14:10:11
>>491
肝心のハッシュテーブルはどうするんだw
04934922007/09/08(土) 14:12:39
ああ、ごめん無視して
俺のほうが単細胞だったようだorz
0494デフォルトの名無しさん2007/09/08(土) 18:57:52
>>488
ValueType.Equalsを使うならボクシングが発生するよね
それならプリミティブ型のみでもやっぱり自分で比較した方が速いのかな
0495デフォルトの名無しさん2007/09/08(土) 23:48:32
comboboxにあるクラスのインスタンスを設定したいのですがどうすればいい?


0496デフォルトの名無しさん2007/09/08(土) 23:51:32
ComboBox.Tag を使いなはれ
0497デフォルトの名無しさん2007/09/08(土) 23:51:33
ValueTypeにそのクラスを設定すればいいだけじゃん

その程度のこともしらない人がつくったアプリなんて使いたくも無いw
0498デフォルトの名無しさん2007/09/09(日) 01:41:29
>>494
JITでボクシングの部分はたいてい取り除かれているらしい。
さらにインラインかもありえるらしい。
ただJITの結果は調べられないからほんとかどうかは知らない。
0499デフォルトの名無しさん2007/09/09(日) 01:59:44
>>498
>ただJITの結果は調べられないからほんとかどうかは知らない。

ボクシングが起きてるかどうかはCLR Profilerで分かるんじゃない?
GCヒープにその値型が確保されてればどっかでボクシングは起きてるてことで。
0500デフォルトの名無しさん2007/09/09(日) 02:10:22
デバッガでアタッチしたら見えるんじゃねーの。
ってか取り除かれるのはかなり限定された状況だけじゃない?
0501デフォルトの名無しさん2007/09/09(日) 05:03:43
>>469
問題が起きたら直すでおk
世の中そんなもんだ。
0502デフォルトの名無しさん2007/09/09(日) 11:42:40
文字列に記述したプログラムを解析して結果を返したいけどいい方法はない?
jscript.netのevalはNGです。
自分で書いた独自のメソッドを呼べないので。。
public string myMethod(string s)
{
return "hoge";
}
文字列に
if(myMethod("hoge")=="hoge") "あ","い")
としておき
結果の
"あ"
を返す方法
文字列中にmyMethodがいつ来るかはわからないです。
0503デフォルトの名無しさん2007/09/09(日) 12:23:16
まあやっぱりJScript.NETのevalだな
myMethodは静的にすれば元アセンブリ参照で呼べるだろ
0504デフォルトの名無しさん2007/09/09(日) 12:36:05
>>502
IronPython
0505デフォルトの名無しさん2007/09/09(日) 12:37:51
教えてください。
ArrayList で foreach を使う事について
ループ内部でIndexof を使用してIndexを求める場合、
foreach を使用せずに最初からインデックスを指定して回すやり方が普通なのかどうか
常識的に考えると後者が普通だと思うのですが
foreach を使用したほうが、コードが若干短くなるし、
コード上では多少効率が割るそうですが、オプティマイズされたCLRが吐かれるような気もしますし
0506デフォルトの名無しさん2007/09/09(日) 12:45:06
ArrayListの中身を変更したいんならindexで回す
参照オンリーならforeachでいいんじゃないのか

Array<T>やList<T>ならForEachメソッドなんてのもある
0507デフォルトの名無しさん2007/09/09(日) 13:05:00
>>506
ありがとうございます
ところで、2003 にはList<T>は無いみたいです...
0508デフォルトの名無しさん2007/09/09(日) 13:08:21
ペイント系のアプリを書こうと思ってとりあえずPaint.NETを
使ってみたが、とてもじゃないが金を取れるソフトではありませんね

やはり、商用だとC/C++がいいのですかね
0509デフォルトの名無しさん2007/09/09(日) 13:18:51
そりゃ金とってないソフトだ品
0510デフォルトの名無しさん2007/09/09(日) 13:35:56
>>508
おまいさんは金を取ることの意味を勘違いしてるな。
The Old New Thingsでも立ち読みしてこい。
ttp://www.amazon.co.jp/dp/4756150004
0511デフォルトの名無しさん2007/09/09(日) 13:57:37
>>508
みたソフトが悪い

あれはMITのヲタク学生が書いた駄作だよ
0512デフォルトの名無しさん2007/09/09(日) 14:05:24
またまたArrayListについて教えてください
ArrayListにオブジェクトをセットして
セットするオブジェクト: int Key, string Name1, string Name2, ...
そのArrayListに対して、例えば、Key = 3 は何番目なのかを
メソッドだけで、処理できますか?
Contain と IndesOf と、比較用のメソッドをオーバーライド?すればできそうな気もしていますが
良くわかりません
0513デフォルトの名無しさん2007/09/09(日) 14:26:55
なにを言っているんのかよく分からんが
IndexOfでとれるだろ。。unboxingされて値が同じなやつが返るだろうけど
05145122007/09/09(日) 14:29:21
>>513
比較の際に、同一オブジェクトではなく、プロパティのKeyのみで比較したいのです
0515デフォルトの名無しさん2007/09/09(日) 14:33:23
>>512
EqualsとGetHashCodeをoverrideする。またはHashtableでも使え。
それがいやならC#2.0のList<T>にはFindメソッドとかあるぞ。
0516デフォルトの名無しさん2007/09/09(日) 14:35:30
ますます何を言ってるのかわからん
intなら値で比較されるだろ

もしかして
key1, string1_1, string1_2,
key2, string2_1, string2_2,
...
みたいな構造をArrayListで作ろうとしてるの?

HashTable使えよ。。。
0517デフォルトの名無しさん2007/09/09(日) 14:42:57
>>512
こういうことがしたいの?

public class Item
{
 public int Key;
 public string Name1;
 public string Name2;
 public string Name3;
}

ArrayList al = new ArrayList();

// 入力

int index = 0;
foreach (Item item in al)
{
  if( item.Key == 3 ) break;
  ++index;
}

if (index == al.Count)
  Console.WriteLine("みつかりませんでした");
else
  Console.WriteLine("{0}番目", index);
0518デフォルトの名無しさん2007/09/09(日) 14:44:43
孔子は言った。
考えるだけで学ぶことをしようとしない人間は間違いを犯しやすい。
05195122007/09/09(日) 14:58:56
ちょっとだけ違います。

ArrayList al = new ArrayList(); // 入力

Item addOrReplaeceItem = new Item(); // 追加または、更新しようとする要素(オブジェクト)
addOrReplaceItem.Key = 2;
addOrReplaceItem.Name1 = "new name1";

int index = 0;
foreach (Item item in al)
{
  if( item.Key == addOrReplaceItem.Key ) ;
{
((Item)al[index]).Name1 = addOrReplaceItem.Name1; // あれば、入れ替え
break;
}
  ++index;
}

if (index == al.Count)
{
  Console.WriteLine("みつかりませんでした");
al.Add (addOrReplaceItem); // 無ければ、追加
}
こんな感じです。
宜しくお願いします。
0520デフォルトの名無しさん2007/09/09(日) 14:59:19
>>505
あほなこと言ってないで素直にインデックスで回すか、
自前でインデックスカウントしとけ。

同じ値とか複数あったらどうすんだ?
無いとしても効率悪くなるだけ。
そんな器用な最適化ができるわけなかろう。
0521デフォルトの名無しさん2007/09/09(日) 15:01:13
いっそDataSet/DataTableを使ったらどうだ。
0522デフォルトの名無しさん2007/09/09(日) 15:01:30
ふらっと逝け
0523デフォルトの名無しさん2007/09/09(日) 15:22:45
>>519
「メソッドだけで」とか難しいこと考えずに
全部書くか自分でメソッド作ることをおすすめする。

どうせList<T>使えるようになったら組み直しなんだし。
難しいことやるのは慣れてからでいいよ。
05245122007/09/09(日) 16:11:52
ありがとうございます。
0525デフォルトの名無しさん2007/09/10(月) 02:22:48
DataGridViewでコントロール+Cを押したときのクリップボードに
値を渡すのを防ぎたいんですがどうすればいいでしょう?
0526デフォルトの名無しさん2007/09/10(月) 02:24:53
clipboardcopymode = Disable
でできました。。どうもです。
0527デフォルトの名無しさん2007/09/10(月) 03:46:34
SDJEditorを使ってみた

やはり、.NETではこの程度が限界か?
0528デフォルトの名無しさん2007/09/10(月) 06:36:45
>>503
すみません
この発言読み飛ばしてました。
静的にすればアセンブリ参照で呼べるというのを解釈すると
new をしないようなstaticなメソッドにしてDLLとして作成。
呼び出し元プログラム側で、参照の設定をしてあげるという
のでしょうか?
この静的にするということは、タイプセーフではないという
ことになりますか?今回ASP.NETで作成したいのですが。。

>>509
IronPaython
は動的言語ということで私も考えたのですが
具体的にどうすればよいのかが浮かびませんでした。
それにC#から呼び出したいのでオーバヘッドが発生する気がします。
0529デフォルトの名無しさん2007/09/10(月) 08:55:33
組み込みスクリプト感覚で使うつもり?
それ危なくない?
0530デフォルトの名無しさん2007/09/10(月) 12:46:34
> 静的にするということは、タイプセーフではないということになりますか?
なんで?

> C#から呼び出したいのでオーバヘッドが発生する気がします。
eval とか言ってるのにオーバーヘッドw

まあ全体に ASP.NET でやるには怖すぎる処理だわな
0531デフォルトの名無しさん2007/09/10(月) 13:01:49
限定された構文でよかったら自分でインタープリタを作る手もあるし、
その手のライブラリもあるだろう。
evalと同等とかC#の関数で出来ることを全部やりたいなら、
CodeDOMやらそれなりに危険なことをしないと無理。

話はそれるがC#3.0のExpression<Func<>>の仕組みをつかって、
eval的なことが出来そうな気がする。
いまのところDLinq用だが、どう見てもLispのクォートを狙ってるとしか思えない。
0532デフォルトの名無しさん2007/09/10(月) 18:43:40
>>531
本題とはずれるけど、C# 3.0 のラムダ式の話、
C# 3.0 は F# からいろいろ輸入したって話らしいから、
F# の(大元をたどればもちろん LISP の) quote 由来だろうね。

LISP だと、データとプログラムを区別しないってのを、
.NET Framework だと、ラムダ式を
デリゲートに代入したときはプログラムとして、
Expression 型に代入したときはデータとして扱う
というコンセプトみたい。
0533デフォルトの名無しさん2007/09/10(月) 18:49:29
>>532
DLRも見てみると面白いよ。
ASTからILへの汎用変換エンジンになりつある。
CodeDOMは死相が出ちゃったけど
DLRはRubyとPythonという目標がある以上、
ある程度のところまで作り込むんじゃないかな。

ちなみにExpression Treeの裏話。
ttp://d.hatena.ne.jp/siokoshou/20070709

ま た D o n B o x か !

0534デフォルトの名無しさん2007/09/10(月) 23:55:38
すんません。
HTML中で16進形式(5桁:ex."&#x20B9F;")で指定されたサロゲートペア文字を
正しく変換する楽な方法ってないですか?

HttpUtility.HtmlDecodeだと、下位4桁までしか認識しないようで、困っております。

string s = HttpUtility.HtmlDecode("&#x20B9F;");
foreach (char c in s)
  Console.WriteLine(string.Format("{0:X4}",(int)c));

--出力(こんな値が入ってて欲しい)--
D842
DF9F
--出力(でもこうなっちゃってる orz)--
0B9F
0535デフォルトの名無しさん2007/09/11(火) 00:07:19
正規表現使えば
0536デフォルトの名無しさん2007/09/11(火) 00:19:54
ども。"&amp;"とかも"&"として取得したいんで、
できればメソッド一発でできたらなぁ、と思ったんですが、
やっぱそこだけ別に処理するしかないスかね。
0537デフォルトの名無しさん2007/09/11(火) 00:29:04
数値文字参照だけ置換してあとはHttpUtilityに任せる
というのをひとつのメソッドにすればメソッド一発だよ
0538デフォルトの名無しさん2007/09/11(火) 00:54:18
気になったのでざっと調べた感じ、HTML4.01の扱える文字集合はISO/IEC 10646-1らしい。
いわゆるUCS-4なんだが、-1はBMPしか扱わないそうな。-2がそれ以外の文字。
0539デフォルトの名無しさん2007/09/11(火) 01:32:11
BitmapオブジェクトがDispose()されたことをBitmapオブジェクトの外部から知ることはできるでしょうか。
ローカルメモリオブジェクト内のDIBをもとに作成したBitmapオブジェクトが破棄されるまではローカルメモリオブジェクトを解放せずにおき、Bitmapオブジェクトが破棄された段階でローカルメモリオブジェクトを解放するようにしたいのです。
DIBをマネージメモリにコピーしてからImage.FromStream()でImageオブジェクトを生成し、すぐさまローカルメモリオブジェクトを解放する、という方法なら安全確実なのですが、いかんせん遅いのです。
0540デフォルトの名無しさん2007/09/11(火) 05:44:01
>>503
>まあやっぱりJScript.NETのevalだな
>myMethodは静的にすれば元アセンブリ参照で呼べるだろ

やってみたけど無理でしたよ!
やっぱりできないのでは?

DLL側に
public class MultiplyClass
{
public static long Multiply(long x, long y)
{
return (x * y);
}
}

としてコンパイル、それを呼び出し側で参照の追加。

string exp = "MultiplyClass.Multiply(10, 5)";
Microsoft.JScript.Vsa.VsaEngine ve =
Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
long result =
(long)Microsoft.JScript.Eval.JScriptEvaluate(
exp, ve);

そうすると
変数 'MultiplyClass' が宣言されていません。
結局、作成したクラスはスコープの範囲外でした。
0541デフォルトの名無しさん2007/09/11(火) 07:22:54
>>538
なるほど。HttpUtility.HtmlDecodeのバグというわけではないわけですね。
わざわざありがとうございます。
0542デフォルトの名無しさん2007/09/11(火) 17:14:33
>>540
いや・・・
0543デフォルトの名無しさん2007/09/11(火) 22:57:12
ふらっとスレから移動してきました

アンマネージリソースを安全に管理するために、
SafeHandleクラスを継承しようと思っているんですが、
ReleaseHandleとIsInvalidをオーバーライドするだけでいいんでしょうか
(実際にはCreateToolhelp32Snapshotでプロセスのスナップショットを得たいので、
CriticalHandleMinusOneIsInvalidから継承したハンドル管理クラスを作る)

具体例的に解説しているサイト等あったら教えてください。

MSDNのサンプルには
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
なんて属性もでてきたりするんですが、意味がわからなくて・・・
0544デフォルトの名無しさん2007/09/11(火) 23:08:30
SafeHandle.ReleaseHandleは?
0545デフォルトの名無しさん2007/09/11(火) 23:22:57
ttps://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/Reliability/default.aspx#S8
0546デフォルトの名無しさん2007/09/13(木) 00:18:36
>>540
だれか答えて!
お願いします
0547デフォルトの名無しさん2007/09/13(木) 00:25:29
JScript.NET で eval を公開するクラス持った dll 作れ。
0548デフォルトの名無しさん2007/09/13(木) 01:45:04
BCB5で作成したDLLをC#から呼び出すにはどうしたらよいんでしょう?

[DllImport("aaa.dll", EntryPoint="FunctionA")]
private static extern uint FunctionA();

で試してみたら実行時に「dllがありません」て返ってきます。
0549デフォルトの名無しさん2007/09/13(木) 01:53:25
そりゃ本当にDLLが見つかってないんだろ。
exeと同じフォルダにおいてるか?
0550デフォルトの名無しさん2007/09/13(木) 03:04:31
関数を公開してないとか
0551デフォルトの名無しさん2007/09/13(木) 05:01:06
SortedListとかはキーと値を使いますが、ソートに値(だけ)を使うコンテナってないですか?
C++のSTLでいう、setクラスみたいなものです。
0552デフォルトの名無しさん2007/09/13(木) 08:01:59
キーと値に同じの突っ込んどけ
0553デフォルトの名無しさん2007/09/13(木) 10:52:29
>549
>550
すみません。メッセージが間違ってました

「DLL 'aaa.dll'を読み込めません:指定されたモジュールが見つかりません。」
でした。
ちなみにDLLはexeと同じフォルダに置いています。
BCBで作ったプログラムからは呼び出しできます。
0554デフォルトの名無しさん2007/09/13(木) 12:05:07
Releaseに置いてたりして
0555デフォルトの名無しさん2007/09/13(木) 12:07:22
DLLをフルパスで指定して見るとか
0556デフォルトの名無しさん2007/09/13(木) 12:10:19
Winアプリを作成しております、相談にのって下さい。

環境:
   WindowsXP Professional SP2
   VisualC# 2005
   .net framework2.0

やりたいこと:
   TextBoxにフォーカスがあるときはTextBoxのBorderStyleプロパティをFixed3Dに、
   フォーカスが無いときはBorderStyleをNoneにする。
   開発全体でこの動作を多用するので、カスタムコントロールとして作成したい。

とりあえずTextBoxを継承したカスタムコントロールを作成しました。
OnEnterでBorderStyle=Fixed3Dに、
OnLeaveでBorderStyle=Noneにするよう記述し動作を確認したところ、
マウスでの移動は思ったとおりに動作するのですが、
Tabキーでの移動が出来ません。(フォーカスが次のコントロールに移らない)
エラーなどは特に出ません。
0557デフォルトの名無しさん2007/09/13(木) 12:11:26
>>556の続き
BorderStyleではなくBackColorプロパティの変更ではTab移動が出来ました。
調べてみたところ、BorderStyleだけでなく、
TextAlignでも同様の不具合が発生するようです。

http://dobon.net/vb/bbs/log3-18/10725.html
>OnEnter / OnLeave で TextAlign プロパティの値を変更すると
>Tab キー操作によるフォーカス移動に支障を来たす

この不具合の回避方法か、
別の方法での機能の実装をご存知の方がいましたら
教えて下さい。
0558デフォルトの名無しさん2007/09/13(木) 12:13:46
>>557の続き 長々すいません
ソース抜粋:
namespace CustomControl
{
  public partial class TextBoxEx : TextBox
  {
    public TextBoxEx()
    {
      InitializeComponent();
    }
    protected override void OnEnter(EventArgs e)
    {
      this.BorderStyle = BorderStyle.Fixed3D;
      base.OnEnter(e);
    }
    protected override void OnLeave(EventArgs e)
    {
      this.BorderStyle = BorderStyle.None;
      base.OnLeave(e);
    }
  }
}
0559デフォルトの名無しさん2007/09/13(木) 12:36:36
>554
それはないです。

>555
やってみましたが、DLLの名前がフルパスで表示される以外
メッセージは変わりませんでした。
0560デフォルトの名無しさん2007/09/13(木) 12:39:02
>>558
BorderStyleを変更するとハンドルが再作成されるからじゃね?
ToolStripTextBoxの内部のコントロールの実装を調べてみたらどうか
0561デフォルトの名無しさん2007/09/13(木) 13:36:30
>>559
もともとの質問であるC#からDLLの呼び出し方なら、>>548で問題ない。
だから、DLLが見つからないのは、環境やパスの問題が一番怪しい。
たとえば>>554とか。

自分のプロジェクトとファイル構成をもう一度じっくり見直したほうがいいと思う。
あと、dllと同じフォルダにあるexeをエクスプローラから直接起動してもだめ?
0562デフォルトの名無しさん2007/09/13(木) 13:46:26
>561
>自分のプロジェクトとファイル構成をもう一度じっくり見直したほうがいいと思う。
見直してみる。

>あと、dllと同じフォルダにあるexeをエクスプローラから直接起動してもだめ?
ダメだった。
0563デフォルトの名無しさん2007/09/13(木) 13:52:16
>>558
引用先に書いてある通り内部でWindowを再作成してるのが原因だろう。
ディスパッチャーに乗せてスタイルの変更処理を遅延させてみた。
一応動いているがタイミングの問題が残るかもしれない。
delegate void ChangeBorderStyleHandler();
protected override void OnEnter(EventArgs e) {
  base.OnEnter(e);
  this.BeginInvoke(new ChangeBorderStyleHandler(ChangeBorderStyleFixed3D));
}
protected override void OnLeave(EventArgs e) {
  base.OnLeave(e);
  this.BeginInvoke(new ChangeBorderStyleHandler(ChangeBorderStyleNone));
}
private void ChangeBorderStyleFixed3D() {
  this.BorderStyle = BorderStyle.Fixed3D;
}
private void ChangeBorderStyleNone() {
  this.BorderStyle = BorderStyle.None;
}
0564デフォルトの名無しさん2007/09/13(木) 13:58:25
>>562
今試したけど普通に呼べた
aaa.cpp (DLL側)
----------
#include <tchar.h>
#include <windows.h>
extern "C" __declspec(dllexport) UINT FunctionA(){
MessageBox(NULL, _T("hello"), _T("test"), MB_OK);
return 0;
}
a.cs (呼び出し側)
----------
using System.Runtime.InteropServices;
public class C {
[DllImport("aaa.dll")]
private static extern uint FunctionA();
public static void Main() {
FunctionA();
}
};
これで作成したDLLとEXEを同じフォルダに置いて実行すると、正しくメッセージが表示された
試しに新しいプロジェクト作って上のコード打ち込んで、動作するか試してみたら?
0565デフォルトの名無しさん2007/09/13(木) 15:17:52
>564
VCで作ったDLLなら普通に呼び出せるけど、BCB5だとダメみたい。
違う方策を考えたほうがいいのかも...
0566デフォルトの名無しさん2007/09/13(木) 16:46:56
>>548
aaa.dll が依存している他の dll が無いだけ。
DependancyWalker (depends.exe) で調べて見れ
0567デフォルトの名無しさん2007/09/13(木) 16:56:41
>>560
>>563
ありがとうございました。

>>563の方法で何とかなりそうなので、
これで進めようと思います。
0568デフォルトの名無しさん2007/09/13(木) 17:09:36
ToolStripItemをオーバーフローしない程度にコンテナ(ToolStripなど)内でサイズ最大化したいのですが、
どうすればよいでしょうか?
05695482007/09/13(木) 17:38:58
>566
調べました。
最初「msjava.dll」がないって言われたから、全然関係なさそうだったけど
探して入れましたが結局ダメでした。
ムムム
0570デフォルトの名無しさん2007/09/13(木) 18:31:36
>>569
msjava.dllは関係ないだろ
ちょっとググっただけでも、BCBで作成したアプリには
cc3250mt.dll
borlandmm.dll
vcl50.bpl
みたいなランタイム(バージョンによって違う)が必要っぽい気がするけど、
この辺は大丈夫なのか?
05715482007/09/13(木) 19:43:58
>570
>この辺は大丈夫なのか?
当然大丈夫であります。
0572デフォルトの名無しさん2007/09/13(木) 20:24:44
ドトネト以外からは使えるのか?
0573デフォルトの名無しさん2007/09/13(木) 21:01:45
ConfigurationSection を継承してカスタム構成情報クラスを作ったけど、
更新した後に Configuration.Save() するタイミングで、「ロックされて
いるのでうんぬん」という例外が発生する。このロックは解除できないもの?
0574デフォルトの名無しさん2007/09/13(木) 21:07:11
単に読込みの時にストリーム閉じきっていないのでは?
05755482007/09/13(木) 21:53:16
>572
BCB5からは呼び出せます。
0576デフォルトの名無しさん2007/09/13(木) 22:05:49
えっBCB5のものは呼び出せないでしょ

メーカー違うとだめじゃない?
delphiでも苦労した覚えが…
0577デフォルトの名無しさん2007/09/13(木) 22:08:11
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12985&forum=7
0578デフォルトの名無しさん2007/09/13(木) 22:15:32
C#のWindowsアプリケーションプロジェクトを新規作成して
FormのPaintイベントハンドラを
private void Form1_Paint(object sender, PaintEventArgs e) {
// e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
e.Graphics.DrawString(
"fffffffffffffffffffffffffffffffffffffffffffff", Font, Brushes.Black, 0, 0
);
}
として実行すると表示される文字列の右の方が寸詰まりな感じになります.
コメントアウトしてあるTextRenderingHintの行を有効にすると寸詰まりになりません.
皆さんの環境でも同様でしょうか?
できれば寸詰まりして欲しくないのですが対処方はないでしょうか.
05795782007/09/13(木) 23:23:25
TextRenderer#DrawText()だと寸詰まりしないようですのでこちらを使って見ます.
でもDrawString()よりだいぶ遅いです・・・.
05805482007/09/14(金) 00:51:25
>577
解決しました。
関数に「WINAPI」をつけたらうまくいきました。
Win32APIの呼び出し規約で、呼び出される関数には「_stdcall」が必要のようです。

ありがとうございました。
0581デフォルトの名無しさん2007/09/14(金) 02:31:09
ハードディスクを交換しようとしています。
起動しているOSのドライブを丸ごとコピーするプログラムをC#
でかけますか?
0582デフォルトの名無しさん2007/09/14(金) 02:47:19
はい
0583デフォルトの名無しさん2007/09/14(金) 13:58:23
そんなもんわざわざ自分で作らなくても探せばどこにでも転がってます
0584デフォルトの名無しさん2007/09/14(金) 14:04:02
書けないとでも思ってるのか?
0585デフォルトの名無しさん2007/09/14(金) 14:12:50
C#で書いたらWindowsインストールしないとデータ復旧できないよな
できるけど実用性は0だ
0586デフォルトの名無しさん2007/09/14(金) 15:03:54
MONOで動けばなんとか……
0587デフォルトの名無しさん2007/09/14(金) 15:09:49
ttp://www.symantec.com/ja/jp/home_homeoffice/products/overview.jsp?pcid=br&pvid=ghost12
■ このスレッドは過去ログ倉庫に格納されています