[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 03/14 21:04 / Filesize : 125 KB / Number-of Response : 432
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

VB.NET質問スレ (Part20)



1 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 11:19:36 ]
前スレVB.NET質問スレ (Part19)
pc11.2ch.net/test/read.cgi/tech/1168585041/

82 名前:80 mailto:sage [2007/03/12(月) 08:19:57 ]
>81
標準ではないですか。。。
codeproject探してみます。
もしくはやったことないけどオーナードローを検討してみます。
ありがとうございました。


83 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:25:02 ]
DataGridでマウスでドラッグして行を選択するのだけど、mousemoveイベントの
間隔が遅すぎてまだらにしか選択されないんです(ゆっくりなら全部選択される)
この間隔ってどこかで設定とか出来る?

84 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:29:50 ]
もう一つDataGrid
そうやってドラッグして選択していった時に、ドラッグしたまま下にはみ出すと
スクロールしながら次々選択されてくってのは何イベント使えばいい?
mouseleaveだと上に抜けたか下に抜けたか分からないし…

85 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:30:58 ]
それ本当にDataGridか?

86 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:44:34 ]
どぼん参考にアクセスのlistboxみたいな動作するようにしてるけど
(rowheader無しで1行全部選択される)それ以外は普通のdatagridだけど

87 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:12:09 ]
小出しにされてもなあ・・なぞなぞじゃないんだし
とりあえず手元に現物が無いから、そっちで原因を洗うしかないんじゃないか?

88 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 09:05:33 ]
>>86
DataGridViewをフォームに貼り付けて
こんな感じはダメ?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim a As New DataTable("test")
  a.Columns.Add(New DataColumn("1"))
  a.Columns.Add(New DataColumn("2"))
  a.Columns.Add(New DataColumn("3"))
  a.Columns.Add(New DataColumn("4"))
  For i As Integer = 0 To 49
    Dim r1 As DataRow = a.NewRow
    r1(0) = "a"
    r1(1) = "b"
    r1(2) = "c"
    r1(3) = "d"
    a.Rows.Add(r1)
  Next
  DataGridView1.DataSource = a
  DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
End Sub

89 名前:デフォルトの名無しさん [2007/03/13(火) 10:58:06 ]
質問があります。

ActiveXのレジストリ登録についてなのですが、
ActiveXを使うには、DLLをレジストリ登録すると思います。

そのとき、
C:\test01\hoge.dll
C:\test02\hoge.dll
とテストバージョンを2つ作ったとして、両方ともレジストリ登録したとしたら、
どちらが適用されるのでしょうか?

regsvr32 /s C:\test01\hoge.dll
regsvr32 /s C:\test02\hoge.dll
  ↓
piyo.exe

また、regeditでいちいち検索せずに、hoge.dllが今どういう登録がされているのか
を調べるとしたら、どうすれば良いのでしょうか?

90 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 11:09:51 ]
>>89
VB.NETで作ったCOMならregsvr32ではなく、regasmを使え。
普通のActiveXの話ならすれ違いっぽいが一応答えておこう。
基本は後勝ち。OleView.exeで調べる。



91 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 11:48:22 ]
>>90
「後勝ち」
確認しました。ありがとうございます。

regsvr32 /s C:\test01\hoge.dll

regsvr32 /s C:\test02\hoge.dll

とやったら、C:\test01\hoge.dll が C:\test02\hoge.dll で上書きされる
ようですね。

92 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 19:35:29 ]
確か1とか2とか憑かなかったっけ?

93 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 19:50:03 ]
COMはGUIDとか使ってそれなりに複雑な固体識別してたはずだよね。
っていうか、上書きって意味わからんw

94 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 20:43:29 ]
全く同じCLSID, ProgID持ってるんだろ

95 名前:デフォルトの名無しさん [2007/03/14(水) 11:00:29 ]
質問です!
下のようなCSVファイルがあるとします。だいたい1000行くらいのログです。

aaa,a,aaa,01,01
bbb,b,bbb,01,02
ccc,c,ccc,02,01
ccc,c,ccc,02,02
・・・・・

このCSVにおいて例えば左から4番目のカラムが04のレコードのレコード数を取得したいのです。
既存アプリが吐くログなのでカラム名もないしSQLが使えるかも不明です。
VBSかVB.net2003で上記プログラムを作成したいのですが適切なロジックが浮かびません。
Do〜Loopで一行ずつ読み込んでカンマでセパレートして配列変数に代入し、
検索条件にヒットしたらカウンタを1UPしていく方法くらいしか思い浮かばないのですが、
ほかにもっとシンプルな方法をご存知の方は教えてください。

96 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 11:03:25 ]
>>95
その方法でいいじゃん。正規表現とか覚えてる間に作れちゃうよ。

97 名前:デフォルトの名無しさん [2007/03/14(水) 12:59:59 ]
DataSetに展開してSELECTする手もあるな

98 名前:デフォルトの名無しさん [2007/03/14(水) 13:00:32 ]
連投スマン
>>97
DataTableだわw

99 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 13:08:22 ]
>>95
ADO.NETでCSV読ませれば?
そんでSQLでやるべし

100 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 13:16:17 ]
ODBC Text DriverはMDACにまだ入ってるのかな?そろそろレガシーな気もする。
ReadLineしてString.Splitで十分な気もするが、
VB.NET的にはMicrosoft.VisualBasic.FileIO.TextFieldParserを使うのが推奨だろう。



101 名前:デフォルトの名無しさん [2007/03/14(水) 14:34:24 ]
VB.NETの型付データセットでデータ取得する時にNULLを扱いたいがエラーにはしたくない
Nothing返すようにしてるけど・・・なんとなく外道なのかな?
2005ならNullable.型 で返すんだけど2003だと如何するのがオヌヌメなんだろう・・・

102 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 16:07:32 ]
1000行程度なら、オレならエクセルで読み込んで処理するが…どうしてもVBなの?

103 名前:デフォルトの名無しさん [2007/03/14(水) 16:11:53 ]
すみませんが、こちらでもよろしければ教えてください。よろしくです。

Windows.Form上で使うControlクラスを継承して新しいコントロールを作成し、
そのBaseクラスのプロパティすべてを、一回の属性設定だけでプロパティウインドウに
表示されなくすることは可能でしょうか。

目的はアプリケーションに関係のない項目はプロパティウインドウに表示させず、
関係のあるごく少わずかの項目だけを表示させたいからですが、このためには
一つ一つのプロパティを継承作成して全部そこにAttribuetes設定しないといけないでしょうか?
できれば、既存の項目は全部まとめて表示させないようにしてから、自分で追加した
プロパティだけを表示させるようにしたいのですが、こうしたことは可能でしょうか?

(本件はC#スレッドでもお聞きしていましたがお答えがほしくこちらでも質問させて
戴きました、すみませんよろしくお願いします)

104 名前:95 mailto:sage [2007/03/14(水) 16:50:45 ]
>>96-100
皆さん、様々なアドバイスありがとうございます。
皆さんのヒントを元にヘルプやwebページを漁ってみましたが、大変参考になりました。
まずは
ttp://dobon.net/vb/dotnet/file/readcsvfile.html
あたりのページを参考に、やったことのない方法でやってみようと思います。

>>102
オフィス製品を導入していないサーバーで動かすため、アプリかスクリプトを作るしかありません。
バッチファイルかなにかで済ませられればそれに越したことはないのですが・・・

105 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 18:00:33 ]
VB.NETをまだ勉強していないのですが、よろしければ質問させてください

現在C、C++、WIN32APIを用いてウィンドウアプリを作成しているのですが
VB.NETでUIを作成し、Cでイベントハンドラのソースを書くことは可能なのでしょうか?
また、その場合CとWIN32のみで作成した場合と処理速度に差がでるのでしょうか?
(現在作っているプログラムはリアルタイム処理なため、処理速度が重要)

理由はデータベース関連の書籍やサイトがほとんどVB、C#、perl、JAVAなどのため
MFCでUIとデータベースを実装するよりも、VB.NETに移行した方がいいのかと思ったからです
C++/CLIなるものがあるようなのですが、何分C以外の言語はほとんど無知なため
よろしければご教授願います

106 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 18:07:23 ]
>>95
set n=0
for /f "delims=, tokens=4" %%0 in (hoge.csv) do if %%0=04 set /a n+=1
echo %n%


107 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 18:33:18 ]
>>105
結局ナニが知りたいのかよく読み取れないが、
とりあえずPInvokeでググってみたらどうかな

cで作ったdll内の関数を呼び出せるか、という意味ならそれは可能。

108 名前:105 mailto:sage [2007/03/14(水) 19:31:17 ]
>>107
わかりにくい文章ですいません
VBを使ってウィンドウを作成し、自分でCで作った関数を呼び出して使えるのか
ということが知りたかったんです
どうやら可能なようですね
PInvokeもかなり参考になりました
ありがとうございました

よろしければ、VBでCを呼び出した場合と、WIN32+Cの場合で処理速度に
差がでるか教えていただければ幸いです
wikipediaのVBの概要に
「ただし、実行速度はC/C++で記述したネイティブプログラムに比べ
10倍から20倍遅いと言われている。」
と書いてあったもので、あまりにも処理速度に差がでるならば使えないので・・・
これはCで書いた関数をVBで書き直した場合、これほどの差がでるということなのでしょうか?


109 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 19:55:57 ]
>>106
if %%0=04

if %%0==04



110 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 20:31:54 ]
>>108
日本のwikipediaなんか話半分に聞いとかなきゃダメでしょw

それたぶんVB6以前の話だと思うし。
VB6だってメモリを直接操作できないことによるオーバーラップがネックになるような
ごく一部の処理(特定の文字列操作)以外はそんな遅くなる理由がないし。

っていうか、あんたの用途に適合的かどうかはあんた自身で試すしかないでしょ。



111 名前:105 mailto:sage [2007/03/14(水) 20:39:37 ]
>>108
wikipediaを信頼しすぎたようですね
大丈夫なようで安心しました
時間はかかると思いますが、自分で試して頑張ってみることにします

ありがとうございました

112 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 20:41:20 ]
アンカーミス・・・>>110でした
スレ汚し失礼

113 名前:デフォルトの名無しさん [2007/03/14(水) 21:47:44 ]
10万行くらいあるテキストファイル(1行100文字前後)の最後の100行を
読みたいのだけれどもっとも高速な方法を教えてくれ。


114 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:01:17 ]
頭から読むしかない。

文字列配列を要素100個分用意して放り込んでいき、
最後まで埋まったら頭から上書きしていく。

115 名前:デフォルトの名無しさん [2007/03/14(水) 22:07:49 ]
>114
>頭から読むしかない。
げげ、ほんまかいな。困った。
じゃあ、逆にファイルを書き出すときに末尾に追加するのではなくて、
先頭に行を追加することはできるかい?それが出来れば
読むときは頭から100行読めばいいので。どう?

116 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:12:02 ]
そんな馬鹿なw
天然無脳(つまり114のことだが)だって1万ページある本の最後の1000行を
書き出すのに巻頭から全部目を通さないだろう

117 名前:デフォルトの名無しさん [2007/03/14(水) 22:21:19 ]
>116
その方法を教えてくれ。たのむ。

118 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:25:14 ]
ケツからファイルポインタをデクリメントしていって1000個目の改行コード探すだけじゃん。
そこから先は普通にテキストとして読めばいい。

119 名前:デフォルトの名無しさん [2007/03/14(水) 22:32:41 ]
>118
サンプルコードを教えてくれ。たのむ。俺は、ファイルポインタなんて
使った経験がない。
StreamReaderでファイルを開いてReadLine() で一行ずつなら読める。

120 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:35:27 ]
氏ねよ



121 名前:デフォルトの名無しさん [2007/03/14(水) 22:39:37 ]
>>119
FileStreamクラスを使うんじゃよ

122 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:43:56 ]
>>113
>>119ってもしかしてテキストファイルなら、TextBox系でLoadFileしておいてTextを
String変数に代入してLength目から逆追いするってのと同じじゃないだろうか。
それなら直ぐ書けるのじゃないだろうか。
って俺はとてもヒマないからやってはあげはしないがw

123 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:45:37 ]
あ、ただTextBoxBaseは最大文字数に制限あったっけ??

124 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:49:38 ]
>>122,123は論外

125 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:18:39 ]
プログラム始めてから数ヶ月の俺にも出来たぜw

126 名前:デフォルトの名無しさん [2007/03/14(水) 23:24:16 ]
>125
それを俺に教えてくれ。たのむ。

127 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:36:37 ]
>>126
Dim a As New IO.FileStream("C:\a.txt", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.None)
Dim count As Integer
Dim Bytes(a.Length - 1) As Byte
For I As Integer = a.Length - 2 To 0 Step -1
 a.Position = I
 If a.ReadByte() = 13 And a.ReadByte() = 10 Then
  count += 1
  If count = 1000 Then
   a.Read(Bytes, 0, a.Length - I)
   TextBox1.Text = System.Text.Encoding.GetEncoding("Shift-jis").GetString(Bytes)
   Exit For
  End If
 End If
Next
a.Close()

エンコードはシフトJIS
勘で作ったから保障はしないよ

128 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:44:13 ]
色んな物がメチャクチャだなぁ

129 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:50:53 ]
>Dim Bytes(a.Length - 1) As Byte
これで台無しだな

130 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 23:58:43 ]
>>126
だからFileStreamクラスを調べろっつってんだろがボケ!!!

でもSeekとかPositionの性能が本当に良いかどうかは知らんよ。



131 名前:デフォルトの名無しさん [2007/03/15(木) 00:01:41 ]
>127
おおーーー、超サンキュウ!
さっそく試してみるわ。
>130
>ボケ
だから質問してるんだよ。俺に優しく教えろ!

132 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 00:06:09 ]
だから悩んだり試したりする前にMSDNに目を通せと(ry

133 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:02:05 ]
>>130はツンデレ

134 名前:デフォルトの名無しさん [2007/03/15(木) 05:04:45 ]
フォーム上にお絵かきするソフトで下記の例外がまれに発生するんだけど、
なんのことやらさっぱり分からん。

「InvalidOperationException:バッファ操作が現在進行中であるため、BufferedGraphicsContext を消去できません」

作り方が悪いのか?
どういう場合に発生する例外なのか、VBプロフェッショナル達よ、教えてくれ。




135 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 08:09:55 ]
頭が悪いんだよ、きっと。
いや、確実に。

作り方が悪いのか?、だと?
お前さん以外にそういうトラブルを申し立てている人間がいるのかよw

136 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 08:15:47 ]
>>127
そいつのベンチマークが見たいな。


137 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 09:51:10 ]
>>125 こんなのでどうか

Public Function ReadTailLines(ByVal filename As String, ByVal lineCount As Integer)
  Dim sep() As String = {vbCrLf}

  Using ifs As IO.FileStream = IO.File.OpenRead(filename)
    Dim allBuf As New List(Of Byte)
    Dim len As Integer = lineCount * 100
    Dim pos As Long = ifs.Length
    Dim lines() As String

    Do
      pos -= len
      If pos < 0 Then
        len += pos
        pos = 0
      End If

      Dim tmpBuf(len) As Byte
      ifs.Seek(pos, IO.SeekOrigin.Begin)
      ifs.Read(tmpBuf, 0, len)

      allBuf.InsertRange(0, tmpBuf)
      lines = Text.Encoding.Default.GetString(allBuf.ToArray(), 0, allBuf.Count).Split(sep, StringSplitOptions.None)
    Loop While pos > 0 And lines.Length < lineCount
(続く)

138 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 09:52:07 ]
    If lines.Length <= lineCount Then
      Return lines
    Else
      Dim ret(lineCount - 1) As String
      Array.Copy(lines, lines.Length - lineCount, ret, 0, lineCount)

      Return ret
    End If
  End Using
End Function

初めてVB.NETでプログラム組んだのでちょいと汚いがな

139 名前:137 mailto:sage [2007/03/15(木) 09:52:57 ]
>>113 の間違いだ。すまん

140 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:22:10 ]
>>134
どんな時にその例外が投げられるかはMSDN見れ。

なんで、もしくはどこで、出てるのかは
お前さんにしかわからない。

とりあえずコード上での発生箇所を探るしかないとおもう



141 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:26:42 ]
例外発生ネタは発生個所を晒してもらわないことには回答のしようがないんだよな

142 名前:デフォルトの名無しさん [2007/03/15(木) 12:50:39 ]
134だけど、例外の発生箇所は下記のとおりだよ。

場所 System.Drawing.BufferedGraphicsContext.Dispose(Boolean disposing)
場所 System.Drawing.BufferedGraphicsContext.Dispose()
場所 System.Drawing.BufferedGraphicsContext.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
場所 System.Drawing.BufferedGraphicsContext.AllocBuffer(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
場所 System.Drawing.BufferedGraphicsContext.Allocate(IntPtr targetDC, Rectangle targetRectangle)
場所 System.Windows.Forms.Control.WmPaint(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
場所 System.Windows.Forms.Button.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)

自分の作ったコード内ではないので、困ってるんだよ。


143 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 12:54:43 ]
そんな内部のことはどうでもいいから最後に実行された自分のコードを確認してくれ

144 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 13:56:01 ]
>>142
> 自分の作ったコード内ではないので、困ってるんだよ。 
俺たちも自分の作ったコード内じゃないことの上にソースすらないからどうしようもないんよ(・ω・)

145 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 14:14:50 ]
>>144
ソースがないと直しようがないじゃないか・・・

なんか ちらつき防止のダブルバッファの使い方を
間違えたんじゃないかと思うんだが?

どうなの、詳しい人?

それと、思い出したんだが.VisualStudioに逆アセンブラがついてた気がする。
難読化されていなかったらソース解析できる可能性があるよ。

146 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 14:16:38 ]
ごめん>>144>>142が同一人物だと勘違いした。OTZ

147 名前:デフォルトの名無しさん [2007/03/15(木) 14:49:56 ]
>137
誰かこれをVB.NET2003に翻訳してくれ。たのむ。


148 名前:デフォルトの名無しさん [2007/03/15(木) 16:47:19 ]
VB.netを使って、サーバーやサイト上のデータ(htmlとかtxtとか)をダウンロードし、
PC内にためこんでデータベース化するソフトを作りたいんですが、
どういう機能を使えばいいのかわかりません。
どういう機能を使えばweb上のデータをDLできるのでしょうか?ADO?ASP?
また、それを学ぶのにお勧めの本などありましたら教えていただけると幸いです<(_ _)>


149 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 18:12:11 ]
>>148
MSDN

150 名前:デフォルトの名無しさん [2007/03/15(木) 18:43:47 ]
VB.NETで作成したEXEファイルを自動的に配布するツールとかないですかね?
クライアントはIEが前提で

ノータッチデプロイメントでいいやって思ってたら、社外からのインターネットアクセスはTAMってやつが邪魔するのよ



151 名前:デフォルトの名無しさん [2007/03/15(木) 19:00:29 ]
んーーーーーいろいろ考えたけど
IISにローカルのEXEファイルとサーバサイドのファイル更新日時比較するスクリプト仕込んだポータルサイトを置いといて
そのスクリプトでFTPダウンロードする方式しか思いつかんな
でもかっこ悪いよなこんなやり方
セキュリティ警告のダイアログがウザそうだし

152 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 19:11:05 ]
フロッピーで郵送

153 名前:デフォルトの名無しさん [2007/03/16(金) 00:00:19 ]
if x < 1e10 then
って書いたら、勝手に
if x < 10000000000 then
ってなるのだが、ゼロが並んでいると分かりにくいので、1e10のまま
にしたいのだが、方法はあるか?

154 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:22:53 ]
VBって16進も勝手に整形するよね。もうアホかと。

Const tenBillion as Integer = 1000000000

とか、

if x < 10^10 then

ぐらいか、手の打ち所は?

155 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:31:47 ]
>>153自動整形機能を切るのはダメ?

156 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:40:54 ]
Int64.Parse( "1e+10", NumberStyles.AllowExponent )

ww

157 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:49:55 ]
>>137
それだと、lines.Length=lineCountのとき、戻り値の最初の行が途中からにならないか。

158 名前:デフォルトの名無しさん [2007/03/16(金) 04:51:37 ]
134だよ。

ソースを提示したいけど、サイズがでか過ぎてムリだよ。
ミニマムコードを示せればいいんだけど。。。

とりあえず、情報を探してみたけど、
forums.microsoft.com/MSDN/ShowPost.aspx?PostID=200483&SiteID=1
www.codeproject.com/cs/samples/swarmscreensaver.asp?df=100&forumid=185924&exp=0&fr=26&select=1139791

似た現象はあるようだけど、解決策はかいてなかった。
下のは、Graphics.Flushを呼べと書いてあるけど、効果は不明。

う〜ん、はまった。。。



159 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 10:09:26 ]
VB.NET2003でソフトを動作させていると
IOExceptionが発生し、内容は
このコマンドを処理するのに必要な記憶域をサーバーで確保できません

こんなエラーが時々出る様子

やっている処理は以下のようなもの(普通にありえないんだが別会社のソフトの関係で仕方なくこうなっている)
OSはすべてXPのSP2
ウィルスバスターインスコ済み

一定間隔(処理完了から次の処理開始までが10秒ほど)
PC2〜10からPC1にある大量のファイル(10000ほどある時もある)を全てなめて計算しているんだが
このときに出ている模様

で、検索してみるとサービスで使用しているスタック領域が不足しているので(XPのデフォは15)、これを現在の値から引き上げてやる模様
これが不足する理由ってのがよくわからないけど、他の人は単純に20とか30にまで引き上げてやれば解決しているみたい

外部から共有フォルダに接続してガリガリ読み込むと単純にネットワークサービスが使うメモリが不足するって事なのかな?
あと、これは・・・PC1に対して行うのかPC2〜10に対して行うんだろうか・・・
PC1だとは思うけどレジストリなのでおいそれと変えたくない予感

もし、何か知ってる人居たら教えてくれないか?

160 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 10:42:42 ]
>>159
その質問に答えられるのはエスパーかペテン師ぐらいだろう。
VB.NET2003でどんなソフトを作ってんのよ。WinFormアプリかサービスか、
通信は共有フォルダなのか独自にやってるのかはっきりしろ。



161 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 10:54:54 ]
>>160
ごめ、説明不足

WinFormアプリで
PC1の共有フォルダを介してPC1のファイルを
PC2〜10のWinFormアプリ各々がチェックしに行ってる状態

PC1のレジストリにはIRPStackSizeの項目は設定されていない
また、パフォーマンスの詳細設定で
パフォーマンスの優先はプログラム
メモリ使用量はプログラム
なぜか仮想メモリは370〜700固定

IRPStackSizeの変更後の値をネットで調べると15が多いようだが
マージンとってそれよりも大きな値(20〜30とか)に設定しても大丈夫なのかな?
出来れば設定値の基準値が知りたいところではあるけれど・・・

また、PC1では基本的に操作しないのでパフォーマンス設定も
サーバOSのデフォのように変えてやったほうがいいんだろうか?

PC1の大まかなスペックはP4 2.8Gでメモリ512M

ん〜・・・説明へたでゴメ


162 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 11:00:38 ]
>>148
Webサービスでがんばれ

163 名前:デフォルトの名無しさん [2007/03/16(金) 12:45:40 ]
TextBoxのMaxLengthプロパティってディフォルトで32767文字もあるけれど、
10文字で十分なのだけれど、この値が大きくても小さくても、プログラム
起動してタスクマネジャでメモリ使用量比べても、余り違わないのだけれど、
これはどういうこと?1000個のTextBoxでテストしてみたが良く分からない。

164 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 12:48:18 ]
入力を制限しているだけでそれ以上の意味はない

165 名前:デフォルトの名無しさん [2007/03/16(金) 12:55:23 ]
>164
知らんかった。39!

166 名前:デフォルトの名無しさん [2007/03/16(金) 13:41:02 ]
馬鹿のイメージでは、メモリアロケーションしてるんかい?
きょうびの高級言語、そんなにせこせこしてねーよ。

167 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 15:04:28 ]
意味が分からない

168 名前:デフォルトの名無しさん [2007/03/16(金) 19:06:31 ]
質問、Excelなんかが公開してるCOMオートメーションをVB.NETから使う時なんですが。
Excel側のイベントでチェックボックスのチェック状態を変更すると、以下の例外が出ます。

 System.Reflection.TargetInvocationException' の初回例外が mscorlib.dll で発生しました。

COMのイベント内で自アプリのフォーム上のコントロールなんかを操作ってどうやったらいいでしょう。
とりあえずExcel側で新しいブックが作成された時のイベント(NewWorkbook)を使ってみたサンプルが
以下です。

Public Class Form1
  Private WithEvents m_objExcel As Excel.Application

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    m_objExcel = New Excel.Application
    m_objExcel.Visible = True

    CheckBox1.Checked = False
  End Sub

  Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
    m_objExcel = Nothing
  End Sub

  Private Sub m_objExcel_NewWorkbook(ByVal Wb As Excel.Workbook) Handles m_objExcel.NewWorkbook
    CheckBox1.Focus()
    CheckBox1.Checked = True
  End Sub
End Class

VB6だと動きますが、やっぱりVB.NETだとお作法が違いますよね

169 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 20:19:54 ]
ワロタ

170 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 21:18:29 ]
おまえらって賢いな



171 名前:168 mailto:sage [2007/03/18(日) 01:11:07 ]
解決しました

.NET Fremawork1.1のC#しか扱ったことなかったのですが、2.0以降ではサブスレッドから
Windowのコントロールにアクセスすると例外が起こるんですね。
1.1の時はたまたま動いていたと。 orz

ちなみにInvoke()呼び出しと、m_objExcelの操作をサブスレッドで実行するように変更したら
動くようになりました。

めったに.NETのC#もVBも使わないんで結構忘れますね。
あと書き忘れてましたが VisualStudio2005使ってます。(最近買いました)

172 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:19:03 ]
>>171
ついでにCOM相互運用とかも見とくといいんでない?

173 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:22:41 ]
ttp://jeanne.wankuma.com/tips/programing/releasecom.html
こんな開放ってやっぱり必要なの?

174 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:25:39 ]
自分しか使わないもんなら不要。
それで困らなければ不要。
立ち上げてすぐ落とすようなもんなら大抵不要。

そうでなければ必須。

175 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:26:36 ]
>>174 thx

176 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:28:38 ]
>>172
ちょうどHELPでそこ読みながらやってました
でも.NETメインじゃないんで熟読するの辛いですね

>>173
やらないとアプリ終了時に例外が出ますね
でも、やらなくてもCOMのローカルサーバーはちゃんと終了するんで
参照カウントはデクリメント(Release)されてるのかも

177 名前:デフォルトの名無しさん [2007/03/18(日) 12:09:49 ]
>>173
やっとかないアンマネージドリソースはフレームワークが勝手に開放するような仕組みもって無いんで解放できないんじゃ・・・?
というわけで仕方なくCOM使う場合は必ず使ってる

ただ、ラッパクラスAをさらにラップしたクラスB作ったら、Bの解放のタイミングでフレームワークがCOMオブジェクトリリースしてくれないかな?
とか淡い期待抱いてるけど


178 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 12:21:01 ]
>>173
使うことが推奨だが、

>COM オブジェクトを扱う場合は、参照の解放を常に意識する必要があります。
>使用した COM オブジェクトの参照カウントが、正しくデクリメントされていないと「メモリ リーク」を起こします。 

は明らかな間違い。いい加減なおして欲しいよ。

179 名前:デフォルトの名無しさん [2007/03/18(日) 12:35:03 ]
>>178
何が間違ってんだ、とぼけたこと抜かしてんなよボケ

180 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 12:36:46 ]
>>178
”メモリリーク”を何に直せばいいの?



181 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:03:03 ]
微妙な問題ではあるが、MSDNフォーラムのこの話題が参考になりそう。
forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=748277&SiteID=7

COMの参照カウンタはRCWが管理している。
ReleaseComObjectはCOMの参照カウンタそのものではなくRCWの参照カウンタを管理するもの。
RCWの参照ポインタがゼロのなるかGCされればCOMの参照カウンタはデクリメントされる。
RCWはReleaseComObjectで開放すべきであり、GCによる開放はフェイルセーフ的なものと考えるべき。


182 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:30:27 ]
>>180
>COM オブジェクトを扱う場合は、参照の解放を常に意識する必要があります。 
COM オブジェクトを扱う場合は、参照の解放を意識する必要があります。 
>使用した COM オブジェクトの参照カウントが、正しくデクリメントされていないと「メモリ リーク」を起こします。  
使用したRCWの参照カウントが正しくデクリメントされていないと期待するタイミングでCOM オブジェクトが開放されません。  







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

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

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