none
Strconvの戻り値がおかしくて,とても困っています。 RRS feed

  • 質問

  • VB2010Expressで新規にウィンドウズフォームアプリケーション「WindowsApplication1」を作成します。

    プロジェクトを【保存していない】状態で,

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            MsgBox(StrConv("コンピューター", VbStrConv.Katakana))
    End Sub

    とします。

    するとメッセージボックスは「コンピ」と表示してしまうのです。

    これはいったいどういう現象なのでしょうか?

    プロジェクトを保存した場合は正しく「コンピューター」と表示されます。

    環境は,

    VB2010Express,Windows 7 Home Premium 32bitです。

     

    一見,プロジェクトを保存すれば実害はないように思いますが,「Orchis」というランチャーソフトからコンパイル済みのexe起動した場合にも同様の症状が発生してしまい,大変困っております。

    どなたか,解決策をご存知の方がいらっしゃいましたら,お教えください。

     

     

    2010年9月16日 1:07

回答

  • 原因が判明しました。

    「Orchis」を互換モード(XP SP3)で動作させていることが原因でした。

    互換モードを解除することで問題が解決しました。

     

    色々とお騒がせして申し訳ございませんでした。

    • 回答としてマーク VB User1 2010年9月16日 4:43
    2010年9月16日 4:43
  • > まったく同じ機種ではありませんが,同じ条件(他のPCでWindows7+VB2010Exp+「Orchis」)のPCでは全く問題は発生しておりません。
    > 「Orchis」が問題という可能性は低いのではと考えております。

    最初の質問を読むと

    > 一見,プロジェクトを保存すれば実害はないように思いますが,「Orchis」というランチャーソフトからコンパイル済みのexe起動した場合にも同様の症状が発生してしまい,大変困っております。

    と書かれておりますよね。これは直接起動した場合は問題ないが、ランチャーから起動した場合は現象が発生するというように読めます。
    もしそうであれば、他のマシンでは問題なくとも、現象の発生するマシンでは Orchis に対して何らかのプロセスが干渉を起こしているのかも知れません。正常に動作するマシンとの環境の違いを、インストールされているアプリや常駐プロセスの違いまで、詳しく調べてみるのも一つの手だと思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2010年9月16日 5:10
    2010年9月16日 3:31
    モデレータ

すべての返信

  • XP SP3/ VS2010 Pro で試してみました。こちらの環境では問題なく「コンピューター」と表示されます。
    ロケールの問題なのかなぁ、OS も VS も日本語版ですよね?
    試しに以下のようにロケールID を指定して実行するとどうなるでしょう。

    Private Sub Button1_Click(
     ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      MsgBox(StrConv("コンピューター", VbStrConv.Katakana, 1041)) ' 日本語を指定
    End Sub
    

    ちなみに 「ロケールID 一覧」 はこちら


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年9月16日 1:57
    モデレータ
  • コメントありがとうございます。

    ロケールIDを指定しても状況は変わりませんでした。

    また,OS,Visual Studio共に日本語版です。

    VB2008でも同様の現象が発生しました。

    2010年9月16日 2:04
  • ご提示されたコードはカタカナをカタカナに変換しているので意味がないものになっています。実際に動作されているコードはご提示されたコードとは違うと思うのですが、実際に不具合が再現する最低限のコードをご提示していただけますか?
    ちなみに私のところで以下を実行してみましたが、問題なく「コンピューター」と表示されました。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      MsgBox(StrConv("こんぴゅーたー", VbStrConv.Katakana))
    End Sub

    また、MsgBoxの問題なのか、StrConvの問題なのか切り分けた方が良いと思います。デバッグ実行で直接StrConvの戻り値を確かめてみて下さい。
    あと、何らかのプロジェクトの設定などが影響しているかもしれませんので、新規にプロジェクトを作成し、私が上に掲載したコードをそのまま実行してみて下さい。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2010年9月16日 2:39
    モデレータ
  • コメントありがとうございます。

    >実際に不具合が再現する最低限のコードをご提示していただけますか?

    投稿文にあるコードが不具合の発生するコードです。

    ただし,私の環境のみで,他のPC2台では再現できませんでした。

     

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      MsgBox(StrConv("こんぴゅーたー", VbStrConv.Katakana))
    End Sub

    を試した結果,やはり「コンピ」と表示されました。

    また,プロジェクトを保存していない状態なため,デバッグ中に値を参照することができませんでした。

    代わりに,

    Dim strWork As String = StrConv("こんぴゅーたー", VbStrConv.Katakana)
    IO.File.WriteAllText("C:\a.txt", strWork, System.Text.Encoding.GetEncoding("Shift_JIS"))

    として,a.txtをエディタで見てみたところ,同様に「コンピ」となっていました。

    ところが,バイナリエディタで見たことろ,「83 52 83 93 83 73 00」となっており,最後にNULL値が含まれているようです。

    OS側に何か問題があるのでしょうか?

    2010年9月16日 2:56
  • 通常、StrConvは変換できない文字はそのまま返します。なぜ「ゅ」以下が切り捨てられるかですが・・・ちなみに「ゅ」を大文字の「ゆ」にしたらうまく行くのでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年9月16日 3:02
    モデレータ
  • 「こんぴゅーたー」を「こんぴゆーたー」

    として,実験してみましたが,結果はやはり「コンピ」となってしまいます。

    2010年9月16日 3:04
  • > 一見,プロジェクトを保存すれば実害はないように思いますが,「Orchis」というランチャーソフトからコンパイル済みのexe起動した場合にも同様の症状が発生してしまい,大変困っております。

    「Orchis」というランチャーソフトがどうも気になります。
    原因を明確にするためにも、まず「Orchis」なるソフトを停止、もしくはインストールされてない環境で同様の操作をするとどうなるか試してみてはいかがでしょうか?
    また VMWare 等でも仮想環境を構築できますので、仮想環境に Windows 7 Home Premium 32bit と VB2010Express をインストールして動作を試した後、Orchis をインストールして試してみるというのはいかがでしょうか?


    # ちなみに Windows Virtual PC は使ったことないので判りません。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年9月16日 3:13
    モデレータ
  • コメントありがとうございます。

    まったく同じ機種ではありませんが,同じ条件(他のPCでWindows7+VB2010Exp+「Orchis」)のPCでは全く問題は発生しておりません。

    プロジェクト保存前という条件は付きますが,VB2010単体でも発生しておりますし,「Orchis」が問題という可能性は低いのではと考えております。

     

    2010年9月16日 3:19
  • > まったく同じ機種ではありませんが,同じ条件(他のPCでWindows7+VB2010Exp+「Orchis」)のPCでは全く問題は発生しておりません。
    > 「Orchis」が問題という可能性は低いのではと考えております。

    最初の質問を読むと

    > 一見,プロジェクトを保存すれば実害はないように思いますが,「Orchis」というランチャーソフトからコンパイル済みのexe起動した場合にも同様の症状が発生してしまい,大変困っております。

    と書かれておりますよね。これは直接起動した場合は問題ないが、ランチャーから起動した場合は現象が発生するというように読めます。
    もしそうであれば、他のマシンでは問題なくとも、現象の発生するマシンでは Orchis に対して何らかのプロセスが干渉を起こしているのかも知れません。正常に動作するマシンとの環境の違いを、インストールされているアプリや常駐プロセスの違いまで、詳しく調べてみるのも一つの手だと思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2010年9月16日 5:10
    2010年9月16日 3:31
    モデレータ
  • コメントありがとうございます。

    >これは直接起動した場合は問題ないが、ランチャーから起動した場合は現象が発生するというように読めます。

    おっしゃる通りです。これだけであれば,「Orchis」を疑うのですが,VB2010単体でも発生するので,私としては「Orchis」を除外してもよいものと考えております。

    ちなみに,「Orchis」を終了(プロセスに無い状態)しても,同様の現象は発生します。

    >もしそうであれば、他のマシンでは問題なくとも、現象の発生するマシンでは Orchis に対して何らかのプロセスが干渉を起こしているのかも知れません。正常に動作するマシンと環境の違いを、インストールされているアプリや常駐プロセスの違 い等、詳しく調べてみるのも一つの手だと思います。

    そうですね。大変そうですが,調べてみます。

    2010年9月16日 3:43
  • 若干の進展がありました。

    「VB2010単体でも発生する」と報告していましたが,不覚にもVB2010そのものを「Orchis」から起動しておりました。

    VB2010をスタートメニューから起動した場合は,問題は発生いたしません。

    これにより,「Orchis」が怪しいという線が濃厚ですが,他のPCでは「Orchis」から起動しても問題はありませんでした。

    もしも,「Orchis」に興味があるかたで本現象の原因がわかるようなことがあれば,お教えいただければ幸いです。

    根本的な解決にはいたっておりませんが,困っている度合いは若干下がりました。

    みなさん,お騒がせして申し訳ございませんでした。いろいろとありがとうございました。

    2010年9月16日 4:36
  • 原因が判明しました。

    「Orchis」を互換モード(XP SP3)で動作させていることが原因でした。

    互換モードを解除することで問題が解決しました。

     

    色々とお騒がせして申し訳ございませんでした。

    • 回答としてマーク VB User1 2010年9月16日 4:43
    2010年9月16日 4:43