C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■3378  印刷ダイアログの制御
□投稿者/ 御苗 -(2007/05/08(Tue) 20:34:51)

    分類:[VB.NET (Windows)] 

    2007/05/08(Tue) 20:40:00 編集(投稿者)
    2007/05/08(Tue) 20:35:57 編集(投稿者)

    printdialogで表示する印刷ダイアログのプロパティボタンを押下不可(disabled)にすることは出来ませんでしょうか?
    ファイルへの出力やページ範囲は制御出来るのですが、プロパティボタンの制御が出来るかどうかがわかりません。どうぞご教授ください。
親記事 /過去ログ12より / 関連記事表示
削除チェック/

■17245  Java webシステム間連携について
□投稿者/ ま -(2008/04/20(Sun) 01:53:58)

    分類:[.NET 全般] 

    ●システムA(以下A)
     某社が開発したかなり安定しているマルチセッション可能なフレームワーク上で動くWebシステム。
     見たことも触ったことも無いが、フレームワークの仕様書を見る限りということ。
     struts ベース。

    ●システムB(以下B)
     自社開発のかなり不安定なマルチセッション不可能なフレームワーク上で動くWebシステム。
     セッション無しでも画面を起動できる点が唯一のポイント。
     struts ベース、但し劣化してます。

    ●システムC(以下C)
     自社開発フレームワークで行こうとした矢先に、部長のなじみの会社に案件を吸い取られ、結果自社フレームワークを
     土台にしつつも大幅にデチューンしたがシステムBのフレームワークよりも安定しているある意味劣化版フレームワーク
     上で動く、マルチセッション不可能なWebシステム。
     見習ったフレームワーク自体が悪いのでこれも劣化 struts ベースです。

    BとCを現在メンテしているのですが、今度Aが「同一ドメインでなければ出来ない連携」をするためこちらの環境に移行
    されようとしています。但し厄介?なことにAの中身を触ることは一切出来ません。

    同一ドメインで Aのセッション中のとある画面から showModalDialog 経由で、Bの新規画面を開き、BのDB情報を元に
    ある計算を行った結果を、window.returnValue 経由で吸い取ろうという画面連携が実装される予定です。

    同一ドメインならば、確かに showModalDialog だろうが、window.open だろうが、なんら関係なしにシステム間で連携でき
    ますが、この連携を思いついた方々は静的HTML でのテスト確認しか行っていません。ですので、Aがまだこちらの環境に
    移行されていないのですが、BとCを使って、CをAに見立ててBを呼び出す、ということを実際にやってみました。

    Cのセッション中のとある画面にボタンを配置し、その画面から 静的HTML経由でBのサーブレットにポストする仕掛け
    でやってみました。なぜ静的HTMLを間に挟む必要があるかというと、showModalDialog はフォームのターゲットにはでき
    ないためです。

    結果、Bをセッションを発行しないモードで起動するとBのJSPを ダイアログ内に表示し、そこで入力した値をCに戻す
    ことに成功しました。


    これでめでたしめでたしかとおもいきや、処理後、Cの画面で適当に画面遷移操作を行うとCのセッションがどうも壊れている
    ように見える挙動が連発して発生し、画面が 404 になったり、1件も無いはずの検索結果が1件表示されたり、まことに怪しい
    挙動が確認できました。モーダルダイアログを起動しない状態ではいじる前の普通に操作できる状態であったのでモーダルダイ
    アログの起動後になんらかの情報が壊れているのが原因と推測しています。

    今時、showModalDialog で画面連携も無いですが、これと同じ境遇に会われた方、居ましたらどんな些細なことでも良いので
    その時の対処方法などあればお知らせ願います。

    通常、こういうシステム連携というのはありえるのでしょうか?在り得る場合、双方のシステム間でどのようにしてセッションを
    共有したりするのでしょうか?セッション・セッションって煩いですが、もしかしてセッションなんぞ関係無いとかそういう落ち
    ですか?

    もしかして、window.open ならそんなこと有り得ないのでしょうか?showModalDialog は window.open の子画面とはちょっと趣
    が異なるのではないか?と愚考しています。

    試したことは、
    Cのセッション中に、Bをセッション新規で開始 =>結果はNG。どこをいじってもエラー画面しか出てこない。
    Cのセッション中に、Bをセッション継続で開始 =>元々のセッションが無いのだから継続しようが無いのでこれもNG。
    Cのセッション中に、Bをセッション無しで開始 =>上記の通り。

    テスト構成は、
    ●Bに新規画面のサンプル画面をJSPで作成、サーブレットに初期化処理(静的HTMLからのポストパラメータを取得処理する)追加
    ●Cのとある画面に showModalDialog を呼び出すJavaScriptを追加、Cのパス配下に、BのサーブレットにPOSTするための静的HTML を
    新規作成して追加

    showModalDialog の第二パラメータに渡す情報は、
    C画面のFORM 要素全てを cloneNode(true) で作成し、コピーを配列にセットして渡しています。
    ダイアログ中のフォームにはその配列のノード種別に関係なく、HIDDEN 要素を作ってそれをフォームに追加し、そのフォームを
    onload でBのサーブレットへサブミットしています。

    cloneNode() でコピると一時的にIDやNAMEが重複することになるのですが、もしかしてこれが悪さしている原因でしょうか?
    でもコピったからといって、Cのフォームにそのコピーが存在する訳では無いし、ダイアログ閉じたタイミングですべてのノードは
    削除していますし・・・・この確認(cloneNode 以外での実装)はまだ行っていませんのでなんとも言えません。



    以上



親記事 /過去ログ34より / 関連記事表示
削除チェック/

■47741  Re[3]: データベースアプリケーションをWEBに載せて共用したい
□投稿者/ ひでこ -(2010/03/12(Fri) 18:30:40)
    ありがとうございました。おかげさまで解決の糸口が見えました。
    No47740 (ひでこ さん) に返信
    > ■No47720 (はつね さん) に返信
    >>■No47715 (ひでこ さん) に返信
    > >>よろしくお願いします
    > >>VISUAL C#2008EXPRESSとSQLSERVER2008EXPRESS、Vistaでデータベースアプリケーションを作成しています。
    > >>アプリケーションを数台のパソコンで共用、操作したいと思っています。そこで廉価で使いやすいレンタル
    > >>サーバー探しています。
    >>
    >>レンタルサーバーをお探しとのことですが、レンタルサーバー上にSQL Server 2008 Express相当があり
    >>それを、VC#でつくったWindowsアプリから直接つなげられるようなところは(断言はできませんが)存在
    >>しないと思います。
    >>レンタルサーバーではなくアウトソーシングセンターなどではあると思いますので、費用面で問gがな
    >>ければアウトソーシングセンターにSQL Serverを設置して、そこに社内から接続するスタイルがよいと
    >>思います。でもレンタルサーバーで廉価という価格感だとしたら無理かな。
    >>
    >>あとは、VC#で作るアプリを、Windowsアプリ+ASP.NET Webサービスと作成し、SQL Server 2008 Express
    >>とASP.NET Webサービスをレンタルサーバーにのせて、Windowsアプリからレンタルサーバー上のWebサー
    >>ビスを使うという形態もあります。
    >>でも、そのWebサービスは注意しないと誰でもが接続してつかえてしまう可能性があるのでユーザ認証を
    >>どうするかなどきちんと設計しないといけません。
    >>
    >>そもそも社内で使うアプリをレンタルサーバーに乗せちゃっていいですか?
    >>社内にサーバー立てたり、データセンターを使うようなセキュリティは不要なんでしょうか?
    >>
記事No.47715 のレス / END /過去ログ81より / 関連記事表示
削除チェック/

■63321  Re[5]: ビルド時にdllを静的に取り込む設定について
□投稿者/ Azulean -(2012/08/13(Mon) 21:53:26)
    No63317 (VB.NETビギナー さん) に返信
    > 私のところでは、上記のようなdllのプロパティには「相互運用機能型の埋め込み」という項目がありません。
    > これって、COMが提供するものなのでしょうか?だとすると、参照する側としては、どうすることもできないということですかねえ。。。

    対象のフレームワークが .NET Framework 4 になっていることが条件です。
    VB2010 を使っていても、.NET Framework 2.0 〜 3.5 が対象となるようにプロジェクトのプロパティで設定されているようなら、見つからないかと思われます。


    No63318 (VB.NETビギナー さん) に返信
    > なぜか、CreateObjectを使うと、Interop.*.dll が作られず、作成したexe単独で起動できるようになりました。
    > そういうものなのでしょうか。

    Interop.*.dll は COM で公開されているクラスを .NET のクラスとして扱えるようにするための定義を集めたものとお考えください。
    そういった型を使わない、CreateObject などの手法であれば Interop.*.dll は不要です。

    ただし、型が宣言されていないのでコンパイル時にメソッドやプロパティのスペルミス、引数の過不足があってもエラーになりません。実行時に例外として初めてエラーになります。
    実行するまで正しいかわからないので、コードの安全性としては悪くなりますが、Interop.*.dll に依存しなくはなります。
記事No.63311 のレス / END /過去ログ106より / 関連記事表示
削除チェック/

■86240  バイナリデータを読んで、日付などの形にする方法について
□投稿者/ へなちょこ -(2018/01/03(Wed) 00:23:56)

    分類:[VB.NET/VB2005 以降] 

    すみません、たびたび質問をさせて頂きます。

    前の質問のご回答で、以下のコードを教えていただきました。
    (一部分だけ書かせてもらいます)

    reader.ReadBytes(2) '最初の2バイトは読み捨て
    Dim len1 As Integer = 2 * reader.ReadByte() '文字1のバイト数
    Dim len2 As Integer = 2 * reader.ReadByte() '文字2のバイト数
    reader.ReadBytes(4) '次の4バイトは読み捨て
    Dim bin1 As Byte() = reader.ReadBytes(len1) '文字列1のデータ
    Dim bin2 As Byte() = reader.ReadBytes(len2) '文字列2のデータ
    Dim txt1 As String = enc.GetString(bin1)
    Dim txt2 As String = enc.GetString(bin2)

    この中で、文字1のバイト数として1バイトのデータを読んでInteger型の変数len1に代入
    その後、Byte()にしてString型にするという流れを行っていると思うのですが、
    このような処理として、以下の事がしたい場合は、どのように書けばよいのか、教えて
    頂けないでしょうか?
    色々と試してみたところ、「型が変換できません」のエラーが出てしまい、訳が分からなく
    なってます....

    ・8バイト分のバイナリデータを読んで、日付の形にする。(「FILETIME 構造体」という
    形のデータだと思います。)
    ・2バイト分のバイナリデータを読んで、Integer型にする。(10進数の値にしたいと思ってます。)

    すみませんが、よろしくお願いします。
親記事 /過去ログ148より / 関連記事表示
削除チェック/

■86241  Re[1]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ Azulean -(2018/01/03(Wed) 00:44:46)
    No86240 (へなちょこ さん) に返信
    > このような処理として、以下の事がしたい場合は、どのように書けばよいのか、教えて
    > 頂けないでしょうか?

    どういった状況・目的で取り組んでいるのかわかりませんが、C 言語のデータ構造の読み方を独学でやりきるのは難しいでしょうし、質問が続いてしまうので、近場に頼れる人がいるならその人に教えてもらった方が良いと思いますよ。


    > 色々と試してみたところ、「型が変換できません」のエラーが出てしまい、訳が分からなく
    > なってます....

    プログラミングは適当に試してもうまくいきません。
    このコードでなぜそれができるのか? どういった仕組みなのか? を考察することも必要ですし、時にはいろいろと調べまくってキーワードをなんとか見つけるということも必要かと思います。
    (VB.NET だけでうまく見つからないなら、C# 側のキーワードでも探してみて、どういったメソッドが使えそうか、探ってみるとかも必要かもしれませんが…)


    > ・2バイト分のバイナリデータを読んで、Integer型にする。(10進数の値にしたいと思ってます。)

    我々が数学などで扱う、普通の 10 進数では、1 桁で 0 〜 9 の 10 通りの表現ができ、1234 という数値は 1 * 1000 + 2 * 100 + 3 * 10 + 4 という数式で表現できます。

    コンピューターの世界では 1 バイトが 8 ビットで構成されているので、256 パターンの数値表現となります。
    256 になると、1つ上の桁=上位バイトに繰り上がり、[01] [00] となるわけです。

    また、Intel 系 CPU ではリトルエンディアンが主流なので、下位バイトから順番に書き込む・読み込むことが一般的です。
    よって、2 バイトで表現される数値は、以下のような計算で求まります。

    Dim result As Integer = CInt(1 バイト目) + CInt(2 バイト目) * 256


    > ・8バイト分のバイナリデータを読んで、日付の形にする。(「FILETIME 構造体」という
    > 形のデータだと思います。)

    こっちの話は「知っているか否か」が鍵になりますね。
    FILETIME 構造体は以下のように 4 バイトの型が 2 つ並んだ構造体です。
    https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms724284

    特にアラインメントなどもなく、8 バイトの連続したデータであることが正しいのであれば、BinaryReader.ReadInt64 で Long 型として読み込み、DateTime.FromFileTime メソッドで DateTime 型に変換すれば楽でしょうね。
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86242  Re[2]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ へなちょこ -(2018/01/03(Wed) 14:06:11)
    ご回答ありがとうございます!

    > どういった状況・目的で取り組んでいるのかわかりませんが、C 言語のデータ構造の読み方を独学でやりきるのは難しいでしょうし、質問が続いてしまうので、近場に頼れる人がいるならその人に教えてもらった方が良いと思いますよ。

    おっしゃる通りです。近場に頼れる人がいれば、聞くことができるのですが、残念ながら該当する人がいない状態です.....。そのため、こちらで助けを求めさせていただいている次第です....
    「C 言語のデータ構造の読み方」が分かっていないことが分かりました。ありがとうございます。


    > プログラミングは適当に試してもうまくいきません。
    > このコードでなぜそれができるのか? どういった仕組みなのか? を考察することも必要ですし、時にはいろいろと調べまくってキーワードをなんとか見つけるということも必要かと思います。
    > (VB.NET だけでうまく見つからないなら、C# 側のキーワードでも探してみて、どういったメソッドが使えそうか、探ってみるとかも必要かもしれませんが…)

    おっしゃるとおりです。
    どうやら調べて出てきた情報が理解できないレベルなのが問題だと思います....
    使えそうなメソッドの情報が見つかっても、それをどう使えばよいのかで悩んでしまうので....
    ただ、今までに教えて頂いたことが元になって、色々と学ぶことができました。

    > よって、2 バイトで表現される数値は、以下のような計算で求まります。
    >
    > Dim result As Integer = CInt(1 バイト目) + CInt(2 バイト目) * 256

    ご丁寧に説明していただき、ありがとうございます!
    教えて頂いた通りに試したところ、目的のデータが取得できました!ありがとうございます!

    > 特にアラインメントなどもなく、8 バイトの連続したデータであることが正しいのであれば、BinaryReader.ReadInt64 で Long 型として読み込み、DateTime.FromFileTime メソッドで DateTime 型に変換すれば楽でしょうね。

    こちらもご教授ありがとうございます!
    記載して頂いた情報を元に検索をして調べたのですが、「BinaryReader.ReadInt64 で Long 型として読み込み」というのは出来て、以下のような値を入手できるのは確認しました。

    バイナリデータ
    50 EC 1D 47 C4 70 D2 01 24

    Long型で取得した値
    131291327456210000

    最終的に表示したい実際の日時
    2017/1/17 13:19:05

    このLong型で取得した値を「DateTime.FromFileTime メソッドで DateTime 型に変換」でよいと思うのですが、以下のサイトの「使用例」をそのまま使うと、変な表示になってしまいます。

    https://msdn.microsoft.com/ja-jp/library/system.datetime.fromfiletime(v=vs.110).aspx

    サイトの「使用例」のFunction FileAgeに、引数としてLong型で取得した値をしていすると、以下の結果がでます。
    出力結果→「350.15:21:09.8697527」

    すみませんが、どうすれば「最終的に表示したい実際の日時」の形にできるか教えて頂けないでしょうか?
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86243  Re[3]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ Azulean -(2018/01/03(Wed) 14:37:57)
    No86242 (へなちょこ さん) に返信
    > すみませんが、どうすれば「最終的に表示したい実際の日時」の形にできるか教えて頂けないでしょうか?

    書いても良いですが、一旦考えてもらおうと思って逆質問します。

    ・TimeSpan 型って何かご存知ですか? →知らない状態であればこの機会に調べてください。
    ・使用例の FileAge 関数はどういった処理をしていると考えていますか?読み解けませんか?
    ・"FileAge" という英語から来ている命名から意味を想像できませんか?
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86245  Re[4]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ へなちょこ -(2018/01/03(Wed) 17:39:13)
    ご回答ありがとうございます。

    > ・TimeSpan 型って何かご存知ですか? →知らない状態であればこの機会に調べてください。

    すみません、知りませんでした....
    調べてみたのですが、「1時間」といった時間の表現をするものと捕らえました。

    > ・使用例の FileAge 関数はどういった処理をしていると考えていますか?読み解けませんか?
    > ・"FileAge" という英語から来ている命名から意味を想像できませんか?

    TimeSpan 型のことを考えて使用例を見たところ、以下の事をしていると考えました。
    ・「現在の時間」と「ファイル作成時間」を取得後、その差を計算して、ファイルが出来てからどれくらい経過しているかを求めている。

    間違っているでしょうか?

    上記のことを参考に、以下のようにコードを書いたら、うまく日時情報が取れました!
    *「getTime」には、Long型にした8バイトの情報が入っています。

    Public Function TimeCal(ByVal getTime As Long) As System.DateTime
    Try
    Dim Time1 As System.DateTime
    Time1 = System.DateTime.FromFileTime(getTime)
    Return Time1
    Catch exp As ArgumentOutOfRangeException
    Throw
    End Try
    End Function

    コード1行目の最後が「System.TimeSpan」だったため、「350.15:21:09.8697527」のような時間が出たのだと思っています。
    これで大丈夫だと思っているのですが、おかしな所はありますでしょうか?
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86247  Re[5]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ Azulean -(2018/01/03(Wed) 19:36:41)
    No86245 (へなちょこ さん) に返信
    >>・TimeSpan 型って何かご存知ですか? →知らない状態であればこの機会に調べてください。
    >
    > 調べてみたのですが、「1時間」といった時間の表現をするものと捕らえました。

    >>・使用例の FileAge 関数はどういった処理をしていると考えていますか?読み解けませんか?
    >>・"FileAge" という英語から来ている命名から意味を想像できませんか?
    >
    > TimeSpan 型のことを考えて使用例を見たところ、以下の事をしていると考えました。
    > ・「現在の時間」と「ファイル作成時間」を取得後、その差を計算して、ファイルが出来てからどれくらい経過しているかを求めている。
    >
    > 間違っているでしょうか?

    合っています。
    age っていうのが年齢とか、そういった意味のある言葉なので、ファイルが作られてからの経過時間という意図で命名しているのでしょうね。


    > コード1行目の最後が「System.TimeSpan」だったため、「350.15:21:09.8697527」のような時間が出たのだと思っています。

    それだけではないですよね?
    Return するものを変更したはずです。

    その「1行目の最後」は「戻り値の型」を示すだけであり、実際にはメソッド(関数)の中の「何を返す(戻す)か?」の部分が重要です。
    そちらを書き落としていると、認識のずれにつながるので、差分を書き漏らさないようにしましょう。
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86248  Re[6]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ へなちょこ -(2018/01/03(Wed) 23:51:48)
    > 合っています。
    > age っていうのが年齢とか、そういった意味のある言葉なので、ファイルが作られてからの経過時間という意図で命名しているのでしょうね。

    認識があっていて良かったです!
    指摘して頂き、ありがとうございました。
    お陰で勉強になりました!

    > それだけではないですよね?
    > Return するものを変更したはずです。
    >
    > その「1行目の最後」は「戻り値の型」を示すだけであり、実際にはメソッド(関数)の中の「何を返す(戻す)か?」の部分が重要です。
    > そちらを書き落としていると、認識のずれにつながるので、差分を書き漏らさないようにしましょう。

    なるほどですね。
    今後は「何を返すのか?」をキチンと意識して、コードを読むようにします。

    やりたいと思っていたことができましたので、この質問は「解決済み」とさせていただきます。

    非常に助かりました!
    ありがとうございました!
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86252  Re[5]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ 魔界の仮面弁士 -(2018/01/05(Fri) 16:27:34)
    No86245 (へなちょこ さん) に返信
    > Public Function TimeCal(ByVal getTime As Long) As System.DateTime
    >  Try
    >   Dim Time1 As System.DateTime
    >   Time1 = System.DateTime.FromFileTime(getTime)
    >   Return Time1
    >  Catch exp As ArgumentOutOfRangeException
    >   Throw
    >  End Try
    > End Function

    動作的には間違いというわけではないのですが、
    このコードについて、少しだけ指摘させてください。


    実は今回提示頂いたコードというのは、実質的には下記と同等です。

     Public Function TimeCal(ByVal getTime As Long) As Date
      Return Date.FromFileTime(getTime)
     End Function


    参考にしたコードを真似ただけでしょうから、上記の書き方になるのも致し方ないのですが、
    実際に使う際には、必ずしも例外処理は必要ではありませんし、今回のように
    わざわざ Function 化するほどの必要性も無さそうです。

    ゆえに今回は、Function を作らずとも FromFileTime メソッドを直接呼び出すだけで十分かと思います。

      'x = TimeCal(longValue)
      x = Date.FromFileTime(longValue)



    以下、上記の書き換えについての補足。


    > Public Function TimeCal(ByVal getTime As Long) As System.DateTime

    As Long と As System.Int64 は同じ意味ですし、
    As Date と AS System.DateTime も同じ意味です。

    Integer や Long や Date は、Visual Basic の組み込み型(プリミティブな型)で、
    Int32 や Int64 や DateTime は、.NET Framework で用意された共通言語ランタイムの型名です。

    どちらを使っても良いのですが、引数が前者表記、戻り値が後者表記で
    混在されているのが気にかかりました。

    意図的に使い分けているのであれば良いのですが、もしかしたら
    Date 型の存在をご存じなかったのでは…ということで紹介しておきます。


    左側が .NET Framework で対応するデータ型で、
    右側が Visual Basic が組み込みで持っているデータ型の名前です。
    ここでは右側(組み込み型)のアルファベット順に列挙してみました。

    System.Boolean 構造体  / Boolean 型 (ブール型)
    System.Byte 構造体  / Byte 型 (バイト型)
    System.Char 構造体  / Char 型 (文字型)
    System.DateTime 構造体 / Date 型 (日付型)
    System.Decimal 構造体  / Decimal 型 (10 進型)
    System.Double 構造体  / Double 型 (倍精度浮動小数点数型)
    System.Int32 構造体  / Integer 型 (整数型)
    System.Int64 構造体  / Long 型 (長整数型)
    System.Object クラス  / Object 型 (オブジェクト型)
    System.SByte 構造体  / SByte 型
    System.Int16 構造体  / Short 型
    System.Single 構造体  / Short 型 (単精度浮動小数点型)
    System.String クラス  / String 型 (文字列型)
    System.UInt32 構造体  / UInteger 型
    System.UInt64 構造体  / ULong 型
    System.UInt16 構造体  / UShort 型



    これを踏まえた上で、
    >   Dim Time1 As System.DateTime
    >   Time1 = System.DateTime.FromFileTime(getTime)
    >   Return Time1
    で使われている System.DateTime を Date 表記に書き換えると、
       Dim Time1 As Date
       Time1 = Date.FromFileTime(getTime)
       Return Time1
    のようになります。(ただの別名表記なので、どちらでも結果は一緒です)

    また、必ずしも変換結果を変数に受け取る必要は無いので、上記 3 行を
      Return Date.FromFileTime(getTime)
    と一行にまとめて書くこともできます。コーディングに慣れるまでは
    変数に一度受けておいた方が、処理の流れを追いやすいかも知れませんけれどね。


    >  Catch exp As ArgumentOutOfRangeException
    >   Throw
    >  End Try
    今回使用した FromFileTime メソッドが ArgumentOutOfRangeException の例外を発生させるケースは
     ・引数の値が小さすぎる(getTime が 0 未満だった場合)
     ・引数の値が大きすぎる(getTime が 2650467744000000000 以上の場合)
    に限られます。

    つまり、最小値と最大値は下記の範囲になります。
     Dim 最小値 = Date.FromFileTime(0L)
     Dim 最大値 = Date.FromFileTime(2_650_467_743_999_999_999L)


    この範囲を超えた場合は、例外処理によって Catch 句に入るわけですが、
    先のコードでは、Catch 句で「単に Throw しているだけ」なので、
    実際にはこのような例外処理は、ほとんど意味が無かったりします。
記事No.86240 のレス / END /過去ログ148より / 関連記事表示
削除チェック/

■86264  Re[6]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ へなちょこ -(2018/01/09(Tue) 21:19:27)
    No86252 (魔界の仮面弁士 さん) に返信

    こちらも返信が遅れて申し訳ございません!

    > ゆえに今回は、Function を作らずとも FromFileTime メソッドを直接呼び出すだけで十分かと思います。
    >
    >   'x = TimeCal(longValue)
    >   x = Date.FromFileTime(longValue)

    なるほど。こんなシンプルなもので十分だったんですね。
    確かに、ご説明いただいた通りですね。

    > 意図的に使い分けているのであれば良いのですが、もしかしたら
    > Date 型の存在をご存じなかったのでは…ということで紹介しておきます。

    そういうことなんですね!
    全然分かっていませんでした!
    「なんで、これには「System.」が付いているんだろう?」って思っていたので、
    ご説明いただき、大変助かりました!

    > これを踏まえた上で、
    >>  Dim Time1 As System.DateTime
    >>  Time1 = System.DateTime.FromFileTime(getTime)
    >>  Return Time1
    > で使われている System.DateTime を Date 表記に書き換えると、
    >    Dim Time1 As Date
    >    Time1 = Date.FromFileTime(getTime)
    >    Return Time1
    > のようになります。(ただの別名表記なので、どちらでも結果は一緒です)
    >
    > また、必ずしも変換結果を変数に受け取る必要は無いので、上記 3 行を
    >   Return Date.FromFileTime(getTime)
    > と一行にまとめて書くこともできます。コーディングに慣れるまでは
    > 変数に一度受けておいた方が、処理の流れを追いやすいかも知れませんけれどね。

    なるほど。
    どちらでも結果は一緒であっても、混乱しないように統一した方が良いですね。

    >> Catch exp As ArgumentOutOfRangeException
    >>  Throw
    >> End Try
    > 今回使用した FromFileTime メソッドが ArgumentOutOfRangeException の例外を発生させるケースは
    >  ・引数の値が小さすぎる(getTime が 0 未満だった場合)
    >  ・引数の値が大きすぎる(getTime が 2650467744000000000 以上の場合)
    > に限られます。
    >
    > つまり、最小値と最大値は下記の範囲になります。
    >  Dim 最小値 = Date.FromFileTime(0L)
    >  Dim 最大値 = Date.FromFileTime(2_650_467_743_999_999_999L)
    >
    >
    > この範囲を超えた場合は、例外処理によって Catch 句に入るわけですが、
    > 先のコードでは、Catch 句で「単に Throw しているだけ」なので、
    > 実際にはこのような例外処理は、ほとんど意味が無かったりします。

    例外処理に関しては、これから整理していかなければいけないと思っていたので、考え方が分かり、
    大変参考になりました!
    他の箇所に関しても、どのような例外があるか考えてみます。

    ご丁寧な説明、誠にありがとうございました!
    また何か質問してしまうかもしれませんが、その際はご教授いただければ幸いです。
    よろしくお願いします。
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86244  Re[1]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ Jitta -(2018/01/03(Wed) 17:36:42)
    No86240 (へなちょこ さん) に返信

     プログラムというのは、pro: 前もって、gram: 書かれたもの、です。
    前もって書かれたもの、つまり、する予定のことをあらかじめ書いておくことです。
    何を書くのか。コンピュータに対する命令です。
    「コンピュータに対する」を、「人」に置き換えてみてもいいでしょう。
    「人に、何をするか、伝える」というのが、プログラム。
    それをコンピュータが理解できる言語で表したものがプログラムコードです。
    ということで、プログラムコードを書く前にプログラムを作りましょう。
    すなわち、何を依頼しているのか、理解しましょう。

    > reader.ReadBytes(2) '最初の2バイトは読み捨て
    > Dim len1 As Integer = 2 * reader.ReadByte() '文字1のバイト数
    > Dim len2 As Integer = 2 * reader.ReadByte() '文字2のバイト数
    > この中で、文字1のバイト数として1バイトのデータを読んでInteger型の変数len1に代入
    > その後、Byte()にしてString型にするという流れを行っていると思うのですが、

     len1 には、「1バイトのデータを読んで代入」ではなく、「1バイトのデータを読んで、2倍して、代入」しています。ここで、「2倍」している意図は何でしょうか。
     ところで、1行の中にコメントを押し込んでいますが、最近、特に .NET Framework でのコードでは、そういうことは推奨されていません。コメントは1行ごとに「何をしているか」ではなく、プログラム(することの流れ)の中で、「この時点で何を実現するか」を書くようにします。「何をするか」は頻繁に変わりますが、「何をしなければならないか」は、仕様変更に連動するだけです。つまり、仕様をコメントとして書いていけば、コメントとコードの違いがバグとして見えるようになります。


    > 色々と試してみたところ、「型が変換できません」のエラーが出てしまい、訳が分からなく
    > なってます....

     エラーが出たときは、どの行なのかというのが重要な情報です。
記事No.86240 のレス /過去ログ148より / 関連記事表示
削除チェック/

■86249  Re[2]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ ?????? -(2018/01/03(Wed) 23:52:29)
    解決
記事No.86240 のレス / END /過去ログ148より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -