VB.NET質問スレ(Part44)
■ このスレッドは過去ログ倉庫に格納されています
>To enable tile view, your application must call the Application.EnableVisualStyles method. らしいけど、ちゃんと呼んでるのか? アプリケーションフレームワーク有効だとその辺勝手にやってくれてたはず >>129 ボタンの VisualStyle は UseVisualStyleBackColor プロパティで変わる。 >>132 のようなことにはならないよ。 自動テストって業務アプリでもつくっておけよ。ww そんなの死んでも作らんわ。 そこまでならシステムバグかも。言ってるだろ保存時のエラーを拾ってる可能性が高いって。 私も経験していて、すべて同じコードをそっくり新規プロジェクト作成してコピペすると バグの再現率は皆無。早めに移動させたほうがいいよ。 3年前には、バックグランドのIsBusyが毎度Falseで戻るというバグ。 この時も新規プロジェクトにコードをコピペしたら直った。 だから、新規でミニマムコード書いてみて再現するんだって。 VS2013+VB.NET+.NET4でWindowsForms新規プロジェクト作成して、 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load Me.ListView1.Columns.Add("1") Me.ListView1.Columns.Add("2") Me.ListView1.Columns.Add("3") Me.ListView1.Columns.Add("4") Me.ListView1.View = View.Tile For i As Integer = 0 To 9 Dim lvi As ListViewItem = New ListViewItem(String.Format("item{0}", i)) lvi.SubItems.Add(String.Format("SubItem1_{0}", i)) lvi.SubItems.Add(String.Format("SubItem2_{0}", i)) lvi.SubItems.Add(String.Format("SubItem3_{0}", i)) Me.ListView1.Items.Add(lvi) Next End Sub とでも書いておけば、プロジェクトのプロパティの「アプリケーションフレームワークを有効にする」の チェック有無でViewがTileになったりならなかったりするんだって。 その後の検証で、VS2017+.NET4や.NET4.7.1などではアプリケーションフレームワークを無効にしていても Application.EnableVisualStyles()を呼んでおけば大丈夫でした。 以上 VS2013のVB.NETでアプリケーションフレームワークを有効にしない場合、コードで Application.EnableVisualStyles()を実行していてもVisualStyleが適用されない部分が発生する (中途半端に適用されてしまう)ことがわかりました。 アプリケーションフレームワークを無効にして Sub Main() から起動していたものを アプリケーションフレームワークを有効にして ApplicationEvents で処理するように変更することで 今回の件は対応できました。 さようなら。 Formを表示するだけなのにvirustotalで調べると Endgame malicious (moderate confidence) Trapmine malicious.moderate.ml.score ↑の2つが必ず検出される・・・ VB2010のBackgroundworkerで質問です Backgroundworker1(BW1)とBackgroundworker2(BW2)を用意しておいて、 メインスレッドからBW1を走らせ、BW1からさらにBW2を走らせるようにして BW2で処理した結果をどうにかしてBW1に渡したいんですが、どうすれば 安全にできるでしょうか? (BW1の中から更にBW2を起動できるのは確認済みです) パッと思いついたのは 1. あらかじめグローバル変数を1つ用意 2. BW2の処理が終わったら計算結果をCompletedイベントで1のグローバル変数に書き込む 3. 次にBW1を起動する時に1のグローバル変数の内容を引数として渡す というものですが、これだとBW1が起動するタイミングでしかデータを渡せないので できればBW1の処理の途中でBW2の計算結果を取得できればと思ってます >>142 クラスを定義して BW1 で New して BW2 の起動時に渡せばいい。 BW2 では e.Argument をクラスにキャストしてプロパティや フィールドを書き換えれば BW1 側で参照できる。 BW2 の終了を BW1 側でどうやって知るかというと クラスに完了フラグを入れたり、待機するなら AutoResetEvent など入れておく。 >>143 ありがとうございます クラスやインスタンスについてはよく理解できてないんですが ・BW1とBW2の間で受け渡ししたい情報をプロパティとして持つクラスを作成 ↓ ・BW1の中でそのクラスのインスタンスを作ってBW2に渡したい値をプロパティにセットし、 それを引数としてBW2を起動させる ↓ ・BW2側で計算が終わったらCompletedイベント内部でプロパティやフィールドを書き換える って感じなのでしょうか? BW2にデータを渡すのは何となく分かる気がするんですが、BW1からBW2の結果を 参照できる理屈がよくわからなくなってきました 俺はスレッドの同期には スレッド1でMonitor.Waitでオブジェクトを待機 スレッド2で計算完了後渡したいデータをキューに入れる→Monitor.Pluse スレッド1でWaitが解けたらキューを取得 以後ループ ってやってる >>144 VS2010ならTaskあるだろ 順番にコールバックで処理を繋いでいくだけだ BackgroundWorkerは忘れていい >>145 そのパターンはWaitHandleを使いなさい >>147 WaitHandleは.NET1.1からあるが Dim p As New Ping() Dim pr As PingReply = p.Send(ip, 2000) If pr.Status = IPStatus.Success Then ハードウエアに添付されてる特定のアプリをインストールした直後に 上記を実行すると、無限に p.Send(ip, 2000)で止まったままになるらしく。 強制的に抜け出す方法があれば教えてください。 特定アプリを削除すると正常に動きます。 >>149 それ、本当にPing.Sendがタイムアウトしないのかちゃんと確認した? 勘違いでしょ 本当にそんなバグがあればだれか問題にしてるはずだと思うけど ググってみたがまったく見つからない >>148 そいつは返す返すも申し訳無かった ちょっとググったら.net4て出てたもんで >>149-150 クラッキング防止のため、ping には応答を返さないサーバーもある。 それで、クラッカーは、ずっと待たされるから、防止になる タイムアウトするしかない >>146 Taskですか・・・初めて聞きました ちょっとググって使い方を調べてみます >>149 だが、遅くなってすみません。 確かに、どんなことがあってもタイムアウトかエラーで止まるとかあるはず。 今回は、どうにも納得できないのはある。 現状は、プライベートIPに向けてPingしてるからなんともいえないけど。 Pingを外して作り直してみますね。 いろいろと、ありがとうございました。 参考になったことを感謝! >>155 async/awaitだろうけど、その処理は非同期じゃないとできないものなのか? むしろ基本は非同期ファーストでよほどの理由がなければ同期にはしないのが現代の.NETプログラミングの常識だろう まあVBerにそれを強制すると大惨事だろうけど UWPだろうとWinFormsだろうとUIスレッドを長時間ブロックしたらフリーズするのは一緒や >>160 まぁ、そりゃそうだが何でもかんでも非同期処理にするのはどうかと思うぞ。 非同期って別スレッドだからスレッドの罠を分かってないヤツが実装すると危険だよ。 スキルの無いヤツほど難しい実装をやりたがる。 単純明快な実装で簡単にできるものまで。 >>161 ほとんどの非同期処理は別スレッドではない システムに依頼したIOの完了を現在のコンテキストのままでやるか、 完了を待って元のスレッドへコールバックするかの違いでしかない(デフォルトでは) 長い処理の完了を待つ必要がある(でもイベントベースの非同期は面倒だからコードはシーケンシャルに書きたい)ときに 利用側が待機用スレッドを作る必要がないので、従来のBackgroundWorkerや生Threadよりずっと安全だ >>157 そうですね リアルタイムの物理シミュレーションで、物理演算スレッドとは別に裏で走らせたい 重いと予想される処理があるので非同期でないと具合が悪いです(しかもその 別処理での計算結果を物理演算スレッドで使う) 物理演算スレッドと同じスレッドでその別処理を走らせると別処理の結果が出るまで 物理演算スレッドが先に進まなくて全体のパフォーマンスが悪化するんで、何とか 別処理は物理演算スレッドから更に分離してマルチスレッドにしたいと考えています 以前はメインスレッドで物理演算スレッドを実行していたせいで描画がかなり遅くなって Backgroundworkerを使って物理演算スレッドを分離したという経緯があるので、そこに 別処理を組み込むのもBackgroundworkerでやれたら・・・と考えていました >>164 TaskCompletionSource使えばスレッドを使わないTaskも作れるよ というか.NET標準の非同期IOはだいたいそう なお、Taskがスレッドを使ってようがいまいが、それを使う側が意識する必要はない デフォルトでは、処理の終了後に元と同じスレッドに処理が戻ってくるからね >>165 ワーカースレッドを使ってるっぽいけどね。 >>166 非同期の中は相変わらずスレッドだし、スレッドの仕組みが分からない人が安易に使うべきじゃない。 スレッドプログラミングモデルは不完全だよ。 >>168 安易もクソも、長時間かかる処理をUIをブロックすることなく、かつ手書きステートマシンによる大きな生産性可読性もなく記述しようと思えば、 別スレッドで同期処理するかTask使うしかないでしょ で前者に比べれば後者のほうがまだ安全だと言ってるの あっ、VBプロの伝家の宝刀DoEventsがあったかw >>170 スレッド絡みの罠を知った上で使うのは問題ないけどねぇ。 async/awaitって非同期が簡潔に書けるし超便利だし。 馬鹿が見様見真似で仕組みも分からずに安易に使うのは許せん。 .NET CoreとしてVB.NET使った事例増えてるんかね? これで増えないとVB.NETもヤバい VB.NETはあっても良いがVB.NETを使うやつは死滅してくれ UWPでdll使いたいんだけど、 Byval hogehoge as string だとエラー出ちゃうね。 試しに Byrefにすると通るんだけど、これバグかな? 文字列を受け取るのではなくて、送りたいからこれだと動かないんだけど。 コンパイラエラー C2872 あいまいなシンボルです。 コンパイルエラーが解消出来ません。 ご教授下さい。 ■コンパイルエラー内容 error C2872: 'MarketplaceWebServiceProducts' : あいまいなシンボルです ■やりたいこと AmazonのAPI「Marketplace Web Service API (MWS)」のHello world 以下ページの右上 オレンジ色の「Download」ボタンから入手できる 「MWSProducts_2011-10-01_v2017-03-22.dll」の使用 https://developer.amazonservices.jp/doc/products/products/v20111001/cSharp.html ■DLLの使用 Visual Studioの対象プロジェクトのプロパティから、 上記DLLの参照を追加しました ■コーディング using namespace MarketplaceWebServiceProducts;//←ここはコンパイルOK using namespace MarketplaceWebServiceProducts::Mock;//←★ここで上記コンパイルエラー ■ご質問 上位の「MarketplaceWebServiceProducts」が正常なのに、 下位の「Mock」を付けるとあいまいなシンボルになるのはなぜでしょうか。 解決策をご教授ください。(可能であれば実装をご提供ください) ■環境 Visual Studio .Net 4.0 C++/Cli >本当にありがとうございます!!!!!!!!!!!! >キモヲタ万歳!!!!!!キモヲタ役に立つ!!!!!!!! この質問者は、荒らしだから、無視しろ! むかしのVisual Basic6とかVisual C++6を今からインストールしても 今インストールしてる最新の.NET環境に影響はありませんか? >>179 そうざますか。 どなたかくわしいひといらっしゃいませんか? >>181 Visual Basic6とかVisual C++6を今からインストールしても 最新の.NET環境に影響はありませんか? >>182 VS.NETは、バージョンの順番に入れないと上手く動かなかったりするけど vb6, vc6は大丈夫だろ? それ以前にWin10へのインストールはやったことがないなあ 俺なら仮装環境へWinXpを入れて使うか vb6のアプリはWin10でも騙しながらなんとか動くよ 騙しながらとは? こういうあいまいな言葉いやだな。 コンピュータ業界の人ならはっきりとしたいものです。 前の会社で「サーバがコケた」とよく言ってた人を思い出した。 サーバに足はないんだからコケないだろ。 >>185 確かに鯖には足は無いね。 鯖は転けない。 プログラミングと言うものはコンピュータとユーザを如何に騙すかに掛かっている。 vb6でコンパイルしたexeは騙し欺し動くけど 開発環境そのものを入れるのは何か問題あった希ガス >>187 インストール時にエラーが出まくるけど開発出来る程度にはインストールできたはず。 無理やりインストールしたVB6で作ったソフトを仕事で使えるわけない >>191 え、そうやって古いゴミvb6システムを騙しながら保守するんだぜ。 MSがvb6に引導を渡してくれたら客先も諦めて移行するんだけどね。 会社が動作保証できない環境で開発させるのはブラックだけ え?Microsoft製品って動作保証されてるの? 知らなかったなあ。.NET Frameworkって何か起きた時にはMicrosoftが補償してくれるんだ。 UWPなんかコンパイラのバグばかりだけど、これって金銭的補償とかしてくれるの? そもそも業務でVB6使うよりも、Windows10使うほうが色々リスク高いと思うけど。 今からでもいいので20年前に出たVB6のバージョンアップ版を出したほうがいいと思う >>198 VB.NET: アタシのどこがいけなかったの? >>197 win10のサポート? 具体的にどんなサポート受けられるの? 今までの経験だと、どんな不具合報告しても、なに言っても改善されないのがマイクロソフトだけど。興味あるな。 >>202 .netで不具合報告をしたら速攻でパッチ出してくれたが >>198 最新版のVB6のIDE用パッチは2016に出てるよ。ぐぐっても古い記事しか出てこないから充ててない人多いよね。 サポート期限ガーとか言ってる奴に限ってvisual studio2008とか使い続けてるんだよな。もうサポート期限切れてるのに。 >>203 へえー、富士通とかマイクロソフトに近い人なのかな? >>205 不具合が100%再現するコードを送ったら直ぐに直してくれた >>206 へえー、アメリカに直で? 日本マイクロソフト通してたら即なんてあり得ないのは常識。 ちなみにVC6を未だに現役で使い続けてるところ沢山あるけど、そこにツッコミ入れる人は少ないんだよな。 コンパイラとしても古いけど、やはり枯れて実績が積まれて使い慣れてるから、なかなか手放せない。 VB6も同じだと思うよ。 日本マイクロソフトは営業所みたいなもんだから。 製品作ってる技術者なんかいない。 >>207 日本MSだよ VSのサポートインシデントを使って MSがバグと認めたらインシデントは消費しない >>201 C#も同じだけど、ソースコードばらまくようなものだもん。ILspyみたいなフリーで高機能なのあるんだもん。 変数を分かりにくくする程度の難読化なんて俺から言わせれば無意味。 VB6はネイティブコンパイルできるから、ソースの可逆性がVCと同じくらい難易度高くなる。現にVCの難読化ソフトがないのはそーゆうこと。 >>212 分かってないな。 VB.netの文法や関数、クラスを変えることはできない。 外部dllなどを参照している場合、それを誤魔化すことはできない。 従って手間は掛かるけど、難読化なんて簡単に破れる。 なんか、最近だと一部のソースをC++の外部DLLに置き換えてしまう難読化ソフトがあるみたいだけど、本末転倒だと思うよ。 ActiveX DLLをファイル名だけでActivater.CreateInstanceする方法無いでしょうか? 前ブログで見たことあったと思うんですが 見つからなくて。 VB.NETは滅びぬ!何度でも甦るさ! .NET CoreにVisual BasicのFile IOを追加 https://www.infoq.com/jp/news/2019/02/VB-File-IO-Core 難読化だって? 先日、大企業のシステムアプリの不具合を報告したら、 「作成した担当者が辞めてしまって・・修正できません。」とか言うからね。 これって、他人のコードが読めないって言われてるのと同じだろ? 可読性wwww それ往々にして ×修正できません ○修正したくありません だから vb.netはクールだけど使ってるやつはキモイしブサイクでスキルがない / ̄ ̄ ̄ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( 人____)< じゃ、10億円で |./ ー◎-◎-) \______________ (6 (_ _) ) カタカタカタ | .∴ ノ 3 ノ ______ ゝ ノ .| | ̄ ̄\ \ / \__| | | ̄ ̄| / \___ | | |__| | \ |つ |__|__/ / /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕 | | ̄ Accessで作った方が速いと言われてしまうのですが、実際どうなんでしょうか >>228 Accessで作った方が速いと言うヤツはAccessの方が早いのだろうけど .netの方が楽だよね >>228 その速いとはすぐに作れるという意味なのか、動作が速いというのかどっちだろう バイナリファイルを編集したいのですが、内容が書き換わりません。 どこが駄目なのでしょうか? Private Sub btnWrite_Click(sender As Object, e As EventArgs) Handles btnWrite.Click Using fs As New System.IO.FileStream(SaveFileName, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite) Dim ByteArray(fs.Length - 1) As Byte Dim CharParam() As Byte fs.Read(ByteArray, 0, ByteArray.Length) hoge = 100 ReDim CharParam(1) CharParam(0) = hoge Buffer.BlockCopy(BitConverter.GetBytes(CharParam(0)), 0, ByteArray, 75, BitConverter.GetBytes(CharParam(0)).Length) fs.Write(ByteArray, 0, ByteArray.Length) End Using Call btnRead_Click(sender, e) MsgBox("書込完了!!") End Sub 書き換わらないというか末尾に追記されてるよね? Readした時点で一番最後ポイントしてるからそこでWriteしたら当然末尾に書かれるぞ Position変更するかSeekするかしないと >>232 ありがとうございます。上手くいきました。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる