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

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

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

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 >>
■62758  Re[6]: 文章編集中にESCキーを押すと全部消えます
□投稿者/ Mira -(2011/11/01(Tue) 08:34:24)
    自分の作ったプログラム使うことなかったので気が付かなかったのですが

    自分のプログラムでもなりますね^^;;;;

    IEの仕様ということで解決に致します
記事No.62702 のレス / END /過去ログ105より / 関連記事表示
削除チェック/

■63853  ジェネリック型でデリゲートの記述について
□投稿者/ らぐんす -(2012/10/19(Fri) 10:44:00)

    分類:[.NET 全般] 

    //@デリゲートの定義
    public delegate IEnumerable<T> GetInfosHandler<T>();


    //Aデリゲート型の変数
    public GetInfosHandler<T> GetInfos;


    //Bこんな感じで使いたい
    if (GetInfos != null)
    IEnumerable<T> infos = GetInfos<T>();

    のようにジェネリックのデリゲートを使用したいのですが、実際にはAのような記述はできません。
    根本的に違うというのなら、ご教授していただければ幸いです。
    よろしくお願い致します。
親記事 /過去ログ107より / 関連記事表示
削除チェック/

■69254  Re[2]: ASP.NETでListViewにテーブルデータを表示
□投稿者/ nat -(2013/12/12(Thu) 10:06:42)
    No69253 (WebSurfer さん) に返信
    > ■No69251 (nat さん) に返信
    >
    > 追加のお願いです。
    >
    > ご自分の環境(OS, .NET, IIS のバージョン、使っているブラウザは何か、Web サイト
    > プロジェクトなのか Web アプリケーションプロジェクトなのか等)ぐらいは最初の質
    > 問に書きましょう。

    いつも返信ありがとうございます。

    説明がおかしくてすみません。

    上記C/S系と書いたのは、WEB系ではない場合という意味でした。

    確かにASP.NETもC/S系ですね。

    説明を間違えました。訂正致します。

    OS ;XP(Home Edition)
    Visual Web Developer2010 Express
    ブラウザ ;IE 8

    以上の環境でWeb アプリケーションプロジェクトを作成する勉強をしています。

    宜しくお願い致します。

記事No.69251 のレス /過去ログ118より / 関連記事表示
削除チェック/

■69272  Re[2]: ASP.NETでORACLEに接続
□投稿者/ nat -(2013/12/13(Fri) 13:53:26)
    No69270 (しま さん) に返信
    > ■No69268 (nat さん) に返信
    >>Visual Web Developer 2010 Express
    >>Oracle 11g XE
    >>WindowsXP
    >>
    >>いつもお世話になります。
    >>
    >>ASP.NET(VB)で、Oracleデータベースに接続し、GridViewコントロールに
    >>
    >>データバインドし、更新や削除をGridViewコントロール上から行おうとしています。
    >>
    >>
    >>VWDのデータソースの構成画面で「テーブルまたはビューから列を指定します」を
    >>
    >>選択しても、その下の「コンピュータ」のドロップダウンリストに、作成済みのテーブルが出てきません。
    >>
    >>Oracleは、この構成画面に対応していないのでしょうか?
    >>
    >>もし、そうなら他にバインドするような方法があるのでしょうか?
    >>
    >>
    >>ちなみに、「カスタムSQLステートメント」を使用して
    >>
    >>SELECT文を入力しクエリのテストを実行すると、成功します。
    >>
    > ODT か ODAC with ODT かが入っているということですね?
    >
    > 以下のページを参照してみてください。
    > (* Google で vs 2010 express oracle と検索すれば上位に出てきます。)
    >
    > http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/6c3502f8-13b5-453d-a798-e90f38c78569/visual-studio-2010-express-edition-?forum=vbexpressja

    ご返信有難うございます。

    はい、ODTが入っています。

    上記サイトなど確認しましたところ、やはり無理みたいですね。

    ご教授戴き感謝です。大変有難うございました。

記事No.69268 のレス / END /過去ログ118より / 関連記事表示
削除チェック/

■70347  Re[3]: VB6とVB.NETのDateDiff関数の違いについて
□投稿者/ 魔界の仮面弁士 -(2014/03/13(Thu) 23:30:40)
    No70343 (ぽこぽこ さん) に返信
    > >>CDate(Now.ToString("yyyy-MM-dd"))
    >>ですが Date.Todayとしたほうがよいです。
    > わざわざ有り難うございますm(__)m

    あるいは、Now.Date のように、「Dateプロパティ」を使うという手法もあります。
    Date プロパティは、Date型から時刻部を切り捨てて、日付だけを戻すプロパティです。


    日付変数の部分をリテラル表記で記述するならば、
     x = DateDiff("d", #3/13/2014 10:00:00 AM#, #3/15/2014#)
    ではなく、
     x = DateDiff("d", #3/13/2014 10:00:00 AM#.Date, #3/15/2014#.Date)
    という処理にするイメージです。



    その他、DateDiff 関数の代わりに下記のようにして計算することもできます。

     Function GetDays(ByVal dateFrom As Date, ByVal dateTo As Date) As Integer
      Return (dateTo.Date - dateFrom.Date).Days
     End Function

     Function GetTotalDays(ByVal dateFrom As Date, ByVal dateTo As Date) As Double
      Return (dateTo - dateFrom).TotalDays
     End Function



    > 修正時こちらを使用します!

    蛇足ですが、VB.NET における DateDiff の問題点は、時刻部の扱いだけでは無かったりします。

      a = DateDiff( "yyyy", #1/5/1989#, #1/8/1989#)
      b = DateDiff( "yyyy", #1/5/1989#, #1/8/1990#)

    VBA/VB6 で上記を算出すると、a は「0」年、b は「1」年を返しますが、
    VB.NET の場合は事情が異なります。VBA と同じ結果を返すこともある一方、
    a が「-63」年、bが「-62」年として計算されてしまうこともありえるのです。


    それは、Windows のコントロールパネル「地域設定」が、和暦モードに設定されていた場合です。

    和暦モードの場合、上記計算は
     a = 「昭和64年1月5日」から「平成元年1月8日」までの年数 
     b = 「昭和64年1月5日」から「平成2年1月8日」までの年数
    という意味で演算されることになります。

    その結果、a = 2 - 64、b = 1 - 64 として処理されます。
    ("yyyy" を DateInterval.Year 指定に変更しても同様です)

    もちろん、西暦モードであれば VBA と同じ結果を返しますが、
    明らかに問題のある実装であると言えます。
    (特に官公庁系や、保険業者系のユーザーでは、和暦設定にされている可能性が…)



    また、日付がらみといえば、午前/午後の文字列書式にも問題があったりします。

    VBA/VB6 の Format 関数においては、
     a = Format(dt, "AM/PM hh:mm")
     b = Format(dt, "A/P hh:mm")
    のような記述があった場合、VB6/VBA では
     a は「AM 03:45」「PM 04:56」といった表記
     b は「A 03:45」「P 04:56」といった表記
    で変換されます。


    VB.NET では書式文字列が変更になった関係で、上記が
     a = Format(dt, "tt hh:mm")
     b = Format(dt, "t hh:mm")
    に変更されるのですが、この結果はコントロールパネルの地域設定に依存して、
     a は「AM 03:45」「PM 04:56」といった表記
     b は「A 03:45」「P 04:56」といった表記
    になる場合もあれば、
     a は「午前 03:45」「午後 04:56」といった表記
     b は「午 03:45」「午 04:56」といった表記
    になる場合があります。しかも、日本語版 Windows の初期設定は後者です。

    『午』では、何のことか分からないですよね…!
記事No.70339 のレス /過去ログ120より / 関連記事表示
削除チェック/

■73319  crystal reportsについて
□投稿者/ 末永 慎一 -(2014/09/11(Thu) 12:24:34)

    分類:[.NET 全般] 

    vs2010,C#.NET,win 7/pro/32bitで、crystal reportsを使ったアプリを以前作りました。
    修正が入り、crystal reportsのファイルをvsで開こうとしたつところ、
    「無効なキーコードです。」というメッセージが出て、開けなくなっていました。
    crystal reportsを含むセットアップを作るとき、うまくいかずcrystal reportsの色んなバージョンをインストールしたのが
    原因かと思い、不必要なバージョンはアンインストールしたのですが、改善されれません。
    ビルドは通り、実行ファイルは正常に動きますが、reportsのファイルをvsで開いて、レポートデザインを修正することができない状態です。

    回避方法ご存知の方みえましたら、アドバイスいただけますよう宜しくお願いいたします。
親記事 /過去ログ123より / 関連記事表示
削除チェック/

■73320  Re[1]: crystal reportsについて
□投稿者/ 魔界の仮面弁士 -(2014/09/11(Thu) 13:07:08)
記事No.73319 のレス /過去ログ123より / 関連記事表示
削除チェック/

■73318  Re[1]: 日時をユニークにしたバッファの作成
□投稿者/ 魔界の仮面弁士 -(2014/09/11(Thu) 10:53:28)
    No73316 (もえ さん) に返信
    > 日時の部分をユニークにし、データ設定部分が可変のバッファを作りたいのですが、何を使用するのがよいのでしょうか?
    > ユニークということでHashTableを試してみましたが、社員NO.と社員名のように2つのデータが無いとできないようですし。

    2005 以降なので、Dictionary が良いかな。あるいは DataSet とか。


    > 2014/09/01 10:05:00,23.2 <−
    > 2014/09/01 10:05:00,18.7 <−
    > 2014/09/1 10:05:00,21.4 <−

    なぜ、実験室C のみ、日付書式が異なるのでしょうか?


    とりあえず、同じ書式という前提で、Dictionary を用いて書くとこんな感じです。
    変数名はあえて日本語にしています。


    日付書式が異なる場合は、String 型のまま処理するのではなく、
    「Date.TryParseExact メソッド」で日付型に揃えてから、
    それをキーとするのが良いでしょう。


    Imports System.IO
    Imports System.Text
    Public Class Form1
      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        '部屋数が増えた場合は、この変数を調整する
        Dim 部屋リスト() As String = {"A", "B", "C"}

        '各部屋の CSV を順次読み込んで、「集計結果」変数に蓄える
        Dim ファイル数 As Integer = 部屋リスト.Length
        Dim 集計結果 As New Dictionary(Of String, String())
        For n = 1 To ファイル数
          Dim CSVパス = Path.Combine("C:\test1", 部屋リスト(n - 1) & ".CSV")
          For Each 列 In File.ReadLines(CSVパス, Encoding.ASCII).Select(Function(行) 行.Split(","c))
            Dim 日時 = 列(0)
            Dim 室温 = 列(1)
            Dim 集計行() As String '←ファイル数3なら4列
            If 集計結果.ContainsKey(日時) Then
              集計行 = 集計結果(日時) '既存行の取得
            Else
              集計行 = New String(ファイル数) {}
              集計行(0) = 日時 '0列目には日時を格納
              集計結果.Add(日時, 集計行)
            End If
            集計行(n) = 室温 'n列目に、その部屋の温度を格納
          Next
        Next

        '集計結果を、日付順に並べて別ファイルに出力
        Dim 最終結果 = From 行 In 集計結果 Order By 行.Key Select String.Join(",", 行.Value)

        File.WriteAllLines("C:\test1\最終結果.csv", 最終結果, Encoding.ASCII)
      End Sub
    End Class
記事No.73316 のレス /過去ログ123より / 関連記事表示
削除チェック/

■73393  Re[1]: トランプの画像をランダムで変えてストップさせたい
□投稿者/ kiku -(2014/09/18(Thu) 20:43:06)
    No73392 (たる さん) に返信
    > ブログラム初心者です。
    > タイトルに書いてありますがVBでランダムでトランプの画像を
    > 変えてストップさせるにはどうするんですか?

    本当に初心者であると仮定して回答します。
    間違っていたらごめんなさい。

    この掲示板では、丸投げのような質問は歓迎されません。
    ある程度努力して、こういうふうにやってみたけど、
    どうしてもエラーが出て進みません。というような
    質問が歓迎されます。

    現在、そのような質問もできない状態であるならば、
    下記のようにじっくり勉強することをお勧めします。

    1.体系的に勉強する。
     ・本を買って勉強する。
     ・無料のWEBサイトを利用し、勉強する。
      おすすめ:http://homepage1.nifty.com/rucio/main/main.htm

    2.目的に合った他人が作ったソースコードを解析し、理解する。
     ・やりたいことに完全に合致したものがどこかにあるのであるならば
      それが一番いいのですが、無い場合が多いので
      似たようなソース付きのアプリを探して勉強し、理解する。
      おすすめ:http://rucio.o.oo7.jp/VBContribution/VBContributionTop.htm#babanuki

    3.最後に自分の本当にやりたいアプリを考えてみる。

    上記の過程で、具体的な的を絞った質問であるならば、回答する人は多いと思います。

    頑張ってください^^
記事No.73392 のレス /過去ログ123より / 関連記事表示
削除チェック/

■74479  Re[8]: 0から9までをシャッフルする
□投稿者/ shu -(2015/01/05(Mon) 17:01:57)
    2015/01/05(Mon) 17:08:57 編集(投稿者)
    2015/01/05(Mon) 17:02:11 編集(投稿者)

    No74478 (shu さん) に返信

    ついでにループ回数10000にした結果

    1015 1048 989 976 981 1015 1012 1016 952 996
    1007 959 1041 973 1022 1045 957 1014 983 999
    992 1040 1001 983 1005 919 988 1007 1046 1019
    1015 978 1044 998 1005 1019 1019 970 971 981
    1013 984 954 1008 995 1031 1019 1010 1032 954
    989 1000 945 1015 1017 1031 966 985 1066 986
    979 1006 1015 1042 962 985 1043 978 971 1019
    1036 975 1022 958 1016 986 1043 1005 951 1008
    964 1043 963 1039 966 970 984 1016 1020 1035
    990 967 1026 1008 1031 999 969 999 1008 1003



    ループ回数10000、rnd.Next(10)にした結果:
    ※1000からかけ離れた回数が発生してしまっている。
    1510 915 992 967 1031 1008 1000 1048 928 601
    1425 1007 990 986 994 1007 966 1013 985 627
    1217 1054 1021 1020 952 1040 1011 999 975 711
    1103 1039 919 1023 1028 1061 1014 983 1019 811
    994 1080 1017 983 992 1006 962 1019 1072 875
    909 1028 1043 1028 999 948 1040 961 1052 992
    813 966 1036 1032 998 990 1022 1005 1005 1133
    770 1011 961 1020 1027 935 1011 972 1011 1282
    657 1006 993 968 985 988 1002 1015 1006 1380
    602 894 1028 973 994 1017 972 985 947 1588

記事No.74460 のレス /過去ログ125より / 関連記事表示
削除チェック/

■75244  リソースファイルの埋め込みつきまして
□投稿者/ ハル -(2015/03/08(Sun) 19:26:40)

    分類:[VB6 以前] 

    お世話になります。

    wmvファイルをexeに埋め込みは、VB6に付属していますサンプルプログラム(VB98\ATM)を参考にしました。

    概要
    Command1_Clickでの音声ファイルは問題なく再生されました。
    Command2_ClickではWindows Media Playerで「準備完了」と表示され、再生できません。
    仮にForm1.WindowsMediaPlayer1.URL = "C:\Documents and Settings\12345\デスクトップ\test.wmv"
    にしますと問題なく再生できます。

    質問
    Windows Media Playerで「準備完了」と表示され、再生できない原因につきまして
    ご教示願えますと幸いであります。

    '
    '''''''''''''''''''''''''''''''''''''''''''''''''
    ' サンプルプログラムを参考
    '''''''''''''''''''''''''''''''''''''''''''''''''
    '
    Option Explicit

    Private Sub Command1_Click()
    SoundBuffer = LoadResData(101, "CUSTOM")'●音声ファイル
    sndPlaySound SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
    End Sub

    Private Sub Command2_Click()
    SoundBuffer = LoadResData(102, "CUSTOM")
    Form1.WindowsMediaPlayer1.URL = SoundBuffer(0) & ".wmv"'●動画ファイルが「準備完了」と表示され再生できません。
    'Form1.WindowsMediaPlayer1.URL = "C:\Documents and Settings\12345\デスクトップ\test.wmv"'●仮では問題なく再生できます。

    End Sub


    '''''''''''''''''''''
    '標準モジユール
    '''''''''''''''''''''
    ' サウンド サポート API 関数  
    Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _
    (lpszSoundName As Any, ByVal uFlags As Long) As Long

    Global Const SND_ASYNC = &H1 ' 非同期再生
    Global Const SND_NODEFAULT = &H2 ' 既定のサウンド非使用
    Global Const SND_MEMORY = &H4 ' lpszSoundName でメモリ ファイルを参照します。

    Global SoundBuffer() As Byte

    '''''''''''''''''''''''
    '関連ドキュメント
    '''''''''''''''''''''''
    Project1.RES
    '
    '''''''''''''''''''''''''''''''''''''''''''''''''
    '
    '''''''''''''''''''''''''''''''''''''''''''''''''


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

■76250  Re[1]: 正規表現が理解できません.
□投稿者/ WebSurfer -(2015/06/18(Thu) 15:53:24)
    No76249 (よぽん さん) に返信

    目的は、

    (1) 正規表現の勉強をすることで、Rectangle.ToString で得られる文字列を
      使ったのはその一例に過ぎない、または、

    (2) Rectangle 構造体の位置、幅、および高さを取得したい(手段は問わない)

    のどっちなんですか?
記事No.76249 のレス /過去ログ129より / 関連記事表示
削除チェック/

■81040  Re[7]: メニューバーをコンパクトに書く方法
□投稿者/ すき家 -(2016/08/25(Thu) 18:36:16)
    = {{New ToolStripMenuItem(), New ToolStripMenuItem()}, {New ToolStripMenuItem(), New ToolStripMenuItem()}}

    でうまくいきました。
     
記事No.81006 のレス /過去ログ138より / 関連記事表示
削除チェック/

■81421  Re[8]: Resourcesの中にある.pngファイルを表示させる
□投稿者/ WebSurfer -(2016/09/20(Tue) 10:08:18)
    No81414 (Pepper さん) に返信

    「解決済み」マークを付けたということは解決したのだと理解していますが、どのように
    解決したのか書いてください。

    自分は特に、普通に Visual Studio のウィザードで作れば、出るはずのないエラーが何故
    出たのかが知りたいです。
記事No.81406 のレス /過去ログ138より / 関連記事表示
削除チェック/

■81537  Re[3]: 2D作図アプリを作成するための画像処理ライブラリ
□投稿者/ とっちゃん -(2016/10/05(Wed) 13:17:20)
    No81535 (kiita さん) に返信
    >>一例
    >>・平均化フィルター、エッジ強調フィルターなど、画像そのものを加工する
    >>・円、四角形など、ベクトル的なオブジェクトを配置し、リサイズできるなど、作成・管理できるもの
    >>
    >>
    >>単に画像処理と聞くと前者のイメージを持つのですが、「作図」と言われると後者のイメージの可能性も出てきます。
    >>(前者なら OpenCV とか、そういう感じかなぁ)
    >
    > 説明不足で申し訳ありません。
    > 一例の後者のイメージです。
    > cadのような作図ができるアプリケーションを作成したいと考えています。
    >
    > 先方が他社に作成したもらった、作図アプリが古いため改修(作り直し)
    > 部屋の間取りを作図して印刷するアプリになります。
    >
    部屋の間取りを作図して、ということはまんまCADアプリですね。
    専門的な知識を必要とするかどうかはアプリの構造次第なので何とも言えませんが

    "CAD ライブラリ" で検索してみました。
    http://www.bing.com/search?q=CAD+%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&qs=n&form=QBLH&pq=cad+%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&sc=4-9&sp=-1&sk=&cvid=B59690CC45FB44A2A3192631E63C9D20

    どんな機能が必要なのかわからないのでこれ以上は絞り込めませんが
    有象無象含めいろんなものがヒットしています。

    まずはこのあたりから調べてみてはいかがでしょう?
記事No.81529 のレス /過去ログ139より / 関連記事表示
削除チェック/

■82441  Re[27]: VBでCRC32を高速で計算する方法
□投稿者/ 魔界の仮面弁士 -(2017/01/10(Tue) 20:08:31)
    No82438 (ぎゅんぎゅ さん) に返信
    > Public Function Append(ByVal crc As UInteger, ByVal input As Byte(), ByVal offset As Integer, ByVal length As Integer) As UInteger
    VB には「Input 関数」が存在するので、input という引数名ではなく、別の名前にした方が良いですね。
    予約語ではないので、この名前のままでもエラーにはなりませんけれども。


    >> crcLocal = table[(crcLocal ^ input[offset++]) & 0xff] ^ crcLocal >> 8;
    > crcLocal = table((crcLocal Xor input(System.Math.Max(System.Threading.Interlocked.Increment(offset), offset - 1))) And &HFF) Xor crcLocal >> 8

    C# の「offset++」と
    VB の「System.Math.Max(System.Threading.Interlocked.Increment(offset), offset - 1)」は
    等価では無いので、ここは修正が必要ですね。


    下記の C# コードは、「33」「44」を出力します。

    int[] ary = new int[] { 11, 22, 33, 44, 55 };
    int offset = 2;
    Console.WriteLine(ary[offset++]);
    Console.WriteLine(ary[offset++]);



    下記の VB コードは、「44」「55」です。

    Dim ary As Integer() = New Integer() {11, 22, 33, 44, 55}
    Dim offset As Integer = 2
    Console.WriteLine(ary(System.Math.Max(System.Threading.Interlocked.Increment(offset), offset - 1)))
    Console.WriteLine(ary(System.Math.Max(System.Threading.Interlocked.Increment(offset), offset - 1)))


    > Public Sub New()
    >  #If Not NETCORE Then
    >  #End If
    >  HashSizeValue = 32
    > End Sub


    この部分、元の C# コードに合わせるなら

    Public Sub New()
     #If Not NETCORE Then
      HashSizeValue = 32
     #End If
    End Sub

    ではありませんか?


    > しかし、実行しても、
    > エラーは出ないのですが、0しか返しません。
    > なにが原因でしょうか?

    先のインクリメント部分を直してみてください。
    それと、このコードをどのようにして呼び出していますか?


    > でエラーが出たので
    > それぞれ以下のように変更しました

    この誤訳は SharpDevelop の問題っぽいですね。
記事No.82326 のレス /過去ログ140より / 関連記事表示
削除チェック/

■82873  TCP通信でのサブスレッドの終了
□投稿者/ あぼん -(2017/02/16(Thu) 22:17:20)

    分類:[ASP.NET (VB)] 

    .NET Framework4.5
    言語:Visual Basic
    Windowsフォームアプリケーション

    とあるサイトのサンプルからTCP通信のフォームアプリケーションを作ろる為に勉強しています。
    そのサイトのサンプルではサーバー側とクライアント側をラジオボタンによって切り分けています。
    私はそれをサーバー側とクライアント側に分けて、二つのフォームアプリケーションを作ろうとしています。
    ほとんどサンプルを流用しているので、TCP通信のところは問題なく繋がったのですが、
    サーバー側のアプリケーションでクライアントからの接続を待機中のスレッドを終了させようとするとフリーズしてしまいます。
    サンプルでは特に問題なく終了できるのになぜ私の方では固まるのかがわかりません。
    スレッドやTCP通信等に触れるのも初めてのことであり、何か根本的に理解できていない部分もあるのではないかと思い、質問させて頂きました。

    また、サブスレッドをAbortで終了させるのもあまりよくないと聞きます。
    接続待機中のスレッドを終了させる方法が何かありましたら、そちらもお聞きしたいと思います。
    どうぞ、よろしくお願いします。

    ↓サーバー側の問題箇所の部分を書いたものです。

    Imports System.Net.Sockets
    Imports System.Threading

    Public Class Form1
    'サーバー設定
    Dim server As TcpClient = Nothing
    'サーバーのリスナー設定
    Dim listener As TcpListener = Nothing
    'サーバーのセカンドスレッドの設定
    Dim threadServer As Thread = Nothing

    'デリゲート宣言
    '別スレッドからメインスレッドのテキストボックスに書き込むデリゲート
    Delegate Sub dlgWriteText(ByVal text As String)

    '引数を持たない汎用のデリゲート
    'ストップボタンを押す等に使用
    Delegate Sub dlgMydelegate()

    'ソケット通信の開始処理
    'Startボタン押下
    Private Sub StartServerbtn_Click(sender As Object, e As EventArgs) Handles StartServerbtn.Click
    StartSock()
    End Sub

    'ソケット通信開始
    Private Sub StartSock()
    'サーバースタート
    Dim OpenFlg As Boolean

    OpenFlg = ServerStart()
    picIndicator.BackColor = Color.Green

    'ボタンのenableを変える
    If OpenFlg Then
    StartServerbtn.Enabled = False
    StopServerbtn.Enabled = True
    End If
    End Sub


    'セカンドスレッドの作成とサーバーのスタート
    Private Function ServerStart() As Boolean

    'ListenするIPアドレス
    Dim ipString As String
    Dim ipAdd As System.Net.IPAddress

    'Listenするポート番号
    Dim port As Integer

    'サーバーのIPアドレス(または、ホスト名)とポート番号をテキストボックスから取得
    ipString = textBoxIp.Text
    ipAdd = System.Net.IPAddress.Parse(ipString)
    port = Integer.Parse(textBoxPortNo.Text)

    'TcpListenerを使用してサーバーの接続の確立
    Try

    'lisenerが無い場合
    If listener Is Nothing Then
    listener = New TcpListener(ipAdd, port)
    End If
    'クライアント接続要求の受付開始
    listener.Start()


    'スレッドの作成と開始
    threadServer = New Thread(New ThreadStart(AddressOf ServerListen))
    threadServer.Start()
    Return True

    Catch ex As Exception
    'エラーが起きた
    listener.Stop()
    picIndicator.BackColor = Color.Navy
    Return False
    End Try
    End Function

    Private Sub ServerListen()

    'クライアントの要求があったら、接続を確立する
    'クライアントの要求が有るまでここで待機する
    server = listener.AcceptTcpClient()

    'インジケータの色を変える
    'バックカラーの変更はデリゲートの必要は無し
    picIndicator.BackColor = Color.LightGreen

    'クライアントとの間の通信に使用するストリームを取得
    Dim stream As NetworkStream = server.GetStream()

    '受信文字が入る。
    'この数字は少なくても可、少ない場合はLoopが何回か実行される
    Dim bytes(1000) As Byte


    '受信が無い場合はここで待機する
    '文字受信が有った場合とクライアントが接続を切った場合に
    '次のステップに進む
    Dim intCount As Integer = stream.Read(bytes, 0, bytes.Length)

    End Sub



    Private Sub StopServerbtn_Click(sender As Object, e As EventArgs) Handles StopServerbtn.Click
    StopSock()
    End Sub

    Private Sub StopSock()
    'サーバーストップ
    CloseServer()

    StartServerbtn.Enabled = True
    StopServerbtn.Enabled = False

    End Sub

    'サーバーのクローズ
    Private Sub CloseServer()
    'サーバーのインスタンスが有って、接続されていたら
    If server IsNot Nothing AndAlso server.Connected Then
    server.Close()
    End If
    Try
    'スレッドは必ず終了させること
    If threadServer IsNot Nothing Then
    threadServer.Abort()
    End If
    Catch ex As Exception
    MessageBox.Show(ex.Message.ToString())
    End Try

    'インディケータの色を変える
    picIndicator.BackColor = Color.Navy

    End Sub

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

■83522  Re[3]: DLLが参照できない
□投稿者/ 魔界の仮面弁士 -(2017/03/26(Sun) 18:49:46)
    No83517 (萌 さん) に返信
    >>> 仰る通り、SysWow64フォルダに入れるとファイルが見えました。
    >> それはそれとして、.NETのDLLは、WindowsのPATHを参照しません。なので、system32に入っていたからといっても実行時に意味はありません。
    >> 開発時にも、あえてsystem32などに入れる意義はないように思います。
    > というのはどういう意味ですか?

    実行時のアセンブリが参照される順番は、
     (1) DEVPATH 環境変数 (既定では探索対象外)
     (2) グローバル アセンブリ キャッシュ
     (3) 構成ファイル(appName.exe.config) の codeBase
     (4) 実行する EXE のある場所
    となっています。開発時の参照設定はまた別の話。
    実際 SysWow64 に置いただけでは、開発はできても実行はできないですよね。


    「開発時」において、参照設定時に C:\YourFolder\Assembly\Microsoft.WindowsAPICodePack.dll が
    列挙されるようにしたいのであれば、レジストリの
     HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\
     HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v3.5\AssemblyFoldersEx
     HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx
     HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.5\AssemblyFoldersEx
    などのバージョン別キーの(既定)に、文字列として「C:\YourFolder\Assembly\」のように、
    DLL の置いたフォルダー名を登録します。

    これにより、参照設定時のダイアログで、[アセンブリ]-[拡張]欄に表示されるようになります。
    あくまでも「開発時」のパスであって、「実行時」には関係ないですけれども。
    https://msdn.microsoft.com/ja-jp/library/ee722096.aspx



    > 参照するDLLはEXEが入ったフォルダーか
    > C:\Windows
    > C:\Windows\System32

    それはアンマネージ DLL の場合の話ですね。

    DllImportAttribute や Declare ステートメントによってロードされる Win32 DLL では、
    パスを明示せずにファイル名のみで呼び出されることが多いのですが、その場合、
    LoadLibrary API の仕様により、
     (1) EXEファイルのあるフォルダー
     (2) Windows のシステムフォルダー(%windir%\SysWow64 / %windir%System32)
     (3) %windir%\System フォルダー(※Win16 用のパスなので現在は使用されない)
     (4) Windows フォルダー(%windir%)
     (5) 環境変数PATH に設定されているフォルダーを前から順番に
    という順番でファイルが探索される仕様になっています。

    このタイプの DLL としては、UNZIP32.DLL や UNRAR64.DLL などが挙げられますが、
    WindowsAPICodePack の DLL は、このパターンには当てはまりません。


    > https://okwave.jp/qa/q205996.html
    > このページにも書かれてあるように

    上記で説明されているのは、vb6jp.dll と mscomctl.ocx ですね。

    前者は、Win32 リソースライブラリ、後者は ActiveX コンポーネントであり、
    これらもまた、それぞれ別の種類の DLL だったりします。

    後者すなわち ActiveX (COM) のコンポーネントでは、まず最初にレジストリ情報が参照され、
    そのレジストリに記載されたパスを元にコンポーネントがロードされる仕組みです。

    仕組みが複雑なので細かい点は省きますが、ひとまず mscomctl の場合についていえば、
     HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}
    にタイプライブラリ情報が記録されており、MSCOMCTL.OCX の場所がここに記載されています。

    DLL ごとに共有されるパスであるがゆえに、ActiveX コンポーネントの配置先は、
    結果的に SysWow64/System32 が利用されることが多いですが、すべての がそうではなく、
      C:\Program Files (x86)\Common Files\System\ado\msado15.dll
      C:\Program Files (x86)\Common Files\microsoft shared\DAO\dao360.dll
      %ORACLE_HOME%\bin\oip10.dll
    のように、システムフォルダ以外に配置されるケースもあります。

    いずれにせよ、配置される場所がシステムフォルダーであることが多い上に、
    レジストリ登録を伴うという性質上、この手の DLL は『インストーラー』を使って
    配置されるのが一般的です。(配置するために管理者権限が必要となるため)

    ただし ActiveX コンポーネントであっても、レジストリ登録無しで、かつ、
    EXE と同じフォルダーに配置されるという特殊なパターンも一応あったりします。
    https://msdn.microsoft.com/ja-jp/library/cc482775.aspx


    > 参照ファイルのローカルコピーをTrueにしていると
    > デバッグ用のフォルダー、リリース用のフォルダー全てにDLLファイルがコピーされることになるため
    > これを避けたいと考えています。

    ローカルコピーで配置することを強くお奨めします。

    既に紹介されているように、.NET Assembly な DLL を複数のアプリケーションで共有させるためには
    GAC すなわちグローバル アセンブリ キャッシュに配置することになります。

    ただし厳密名が無いと指定できないため、アセンブリの署名が必要となります。
    自身で作成したライブラリであるならともかく、他者作成のライブラリに対して用いる方法ではありません。


    http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_03/idnfw11_03_03.html
    http://dobon.net/vb/dotnet/deployment/installgac.html

    GAC に存在しない場合、構成ファイル(appName.exe.config) の <codeBase href> から
    探索させることはできます。この場合、厳密名のあるアセンブリなら任意のパスを使えますが、
    厳密名が無い場合は、EXE のある場所のサブフォルダーしか指定できません。

    .config を使うパターンについては、このほか、<probing> や <developmentMode> といった
    方法がありますが、probing は厳密名の有無に関わらずあくまでもサブフォルダーしか
    指定できません。どちらかというと、単一ソリューションに複数のプロジェクトが
    含まれるようなケースなどを想定したものでしょう。

    <developmentMode> の方は、環境変数 DEVPATH を利用しますが、既に指摘されているように、
    あくまでも「開発者向け」の機能であるため、利用者向けに配置するための機能ではありません。
    http://d.hatena.ne.jp/tekk/20110403/1301829578


    ちなみに今回の目的からは外れてしまうかと思いますが、DLL を共有したいのではなく、
    DLL を配布せずに EXE だけの配置にしたいという意図であるのなら、ILMerge を用いて、
    EXE の中に DLL を取り込んでしまうという手もあったりします。
    https://www.microsoft.com/en-us/download/details.aspx?id=17630
記事No.83515 のレス /過去ログ142より / 関連記事表示
削除チェック/

■84694  Re[1]: バイナリファイルの読み込み
□投稿者/ shu -(2017/07/27(Thu) 21:02:58)
    No84692 (ななな さん) に返信
    > VB6でかかれたものを、VB.NETに書き換えをしています。
    VB6で書かれたもののサンプルと変換したものを記述されたほうがよいと思います。

    > 1行ごとに先頭文字をチェックし、
    1行はどんな単位でしょうか?例えば固定長とか?


    > 一致したらその一行の一部分を取り出して変数に保管し、
    > また次の行から読むような形にしたいです。
    >
    > 初めてのVB.NETで挫折しています。

    どの程度調べて記述されているコードはどんな感じでしょう?
記事No.84692 のレス /過去ログ144より / 関連記事表示
削除チェック/

■84666  Re[8]: C++のVTBYRF|VTBSTRの受け取りに関して
□投稿者/ Azulean -(2017/07/26(Wed) 12:44:06)
    No84662 (myzk さん) に返信
    > 親身にご回答いただいている中大変申し訳ありません。多くの方のご意見もお伺いしたく載せてしましました。削除致しました。

    確実なのは C++/CLI 路線だとは思います。
    いずれにせよ、簡単な方法はないので別の場所で質問しても答えは変わらないだけで時間が過ぎていくだけです。

    ご自身の手に負えないなら、早めにギブアップして、組織内の力量ある人に頼るか、別の業者に投げるか、諦めるかした方がよいですよ。
    解決しないまま、日数が経過する方が不味いので。
記事No.84635 のレス /過去ログ144より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 >>

パスワード/

- Child Tree -