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

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

C# と VB.NET の入門サイト

Re[4]: ExTextBox について


(過去ログ 150 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■87495 / inTopicNo.1)  ExTextBox について
  
□投稿者/ miya (1回)-(2018/05/29(Tue) 10:23:48)

分類:[C#] 

業務アプリケーションをWindows7から、Windows10環境へ移行するため、
32bit環境を64bit環境に対応させようとしております。

VisualBasicで64bitに設定したら、ExTxtBoxのエラーが出てしまいました。
おそらく、ExTxtBoxが32bitだからではないかと思います。

他のコントロールに変えたらよいとも思うのですが、テキストボックスを
大量に使っているので、相当な開発時間が必要になってしまいます。

なにかよい解決方法はありますでしょうか。

おそれいりますが、教えていただけましたら幸いです。

どうぞよろしくお願いいたします。
引用返信 編集キー/
■87496 / inTopicNo.2)  Re[1]: ExTextBox について
□投稿者/ WebSurfer (1503回)-(2018/05/29(Tue) 10:38:12)
No87495 (miya さん) に返信

> おそらく、ExTxtBoxが32bitだからではないかと思います。

それが間違いなければ、

> なにかよい解決方法はありますでしょうか。

アプリのコンパイルオプションを x86 にしてみてはいかがですか?

exe が x86, ExTextBox の dll も x86 であれば、64-bit OS では WOW64 上で動くと思います。

32-bit OS 上ではもちろん問題なく動くはずです。
引用返信 編集キー/
■87497 / inTopicNo.3)  Re[2]: ExTextBox について
□投稿者/ miya (2回)-(2018/05/29(Tue) 10:57:02)
No87496 (WebSurfer さん) に返信

早速のご回答ありがとうございます。

> アプリのコンパイルオプションを x86 にしてみてはいかがですか?

やってみたところ、今度はデータベースのDLL(ODP.net)で引っかかってしまいました。
Oracle12g 64bitがベースなので、テキストボックスの方で対応する方法はないでしょうか。



引用返信 編集キー/
■87499 / inTopicNo.4)  Re[3]: ExTextBox について
□投稿者/ WebSurfer (1504回)-(2018/05/29(Tue) 11:20:02)
No87497 (miya さん) に返信

> やってみたところ、今度はデータベースのDLL(ODP.net)で引っかかってしまいました。

そういう情報は後出ししないで最初に書いておきましょうよ。

> Oracle12g 64bitがベースなので、テキストボックスの方で対応する方法はないでしょうか。

Oracle にはさわったこともないのですが、ネットの情報では ODP.NET には 32-bit 版と
64-bit 版の両方があるそうです。

その情報に間違いなければ 32-bit 版の ODP.NET を使えば良いのでは?
引用返信 編集キー/
■87501 / inTopicNo.5)  Re[4]: ExTextBox について
□投稿者/ miya (4回)-(2018/05/29(Tue) 11:39:52)
No87499 (WebSurfer さん) に返信

> そういう情報は後出ししないで最初に書いておきましょうよ。

→大変失礼いたしました。以後気を付けます。


> その情報に間違いなければ 32-bit 版の ODP.NET を使えば良いのでは?

→現状それで動かないことはないのですが、Windows10とOracle12g 32bitの
 組み合わせだとWindowsのバージョンアップでいつ動かなくなるか心配です。
 (いきなり業務が止まるリスクがありますので)
 できればテキストボックスの方から解決できる方法はないでしょうか。

引用返信 編集キー/
■87502 / inTopicNo.6)  Re[1]: ExTextBox について
□投稿者/ 魔界の仮面弁士 (1694回)-(2018/05/29(Tue) 11:41:25)
No87495 (miya さん) に返信
> VisualBasicで64bitに設定したら、ExTxtBoxのエラーが出てしまいました。
どの時点で、何というエラーが発生するのでしょうか。

どの ExTextBox なのか、また、本当に ExTextBox 自体の問題なのかどうか、
現時点では判断ができないです。


> おそらく、ExTxtBoxが32bitだからではないかと思います。

この掲示板で質問しているという事は、下記のコントロールでしょうか。
(違っていたら、どの ExTxtBox なのかを明示してください)

http://www.free-sharesoft.com/libDL/jp990001wank0000/0001.html
https://www.vector.co.jp/soft/winnt/prog/se369050.html
http://jeanne.wankuma.com/library/


上記を CorFlags.exe でチェックしてみたところ、以下の結果が返されました。
.NET 1.x 世代のライブラリかな…? 一応、AnyCPU 扱いのように見えます。

Version   : v1.1.4322
CLR Header: 2.0
PE        : PE32
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0


とりあえず、VB (.NET Framework 4.7.2) の x64 ビルドに貼って、
AvailableType = HalfKana に設定して動かしてみましたが、
Windows 7 環境では、エラーの再現には至りませんでした。Windows 10 では未確認。


> 大量に使っているので、相当な開発時間が必要になってしまいます。
> なにかよい解決方法はありますでしょうか。
作者に依頼して x64 環境でリコンパイルしてもらうとか?

引用返信 編集キー/
■87503 / inTopicNo.7)  (削除)
□投稿者/ -(2018/05/29(Tue) 11:53:32)
この記事は(投稿者)削除されました
引用返信 編集キー/
■87505 / inTopicNo.8)  Re[5]: ExTextBox について
□投稿者/ WebSurfer (1505回)-(2018/05/29(Tue) 12:00:53)
No87501 (miya さん) に返信

> →現状それで動かないことはないのですが、Windows10とOracle12g 32bitの
>  組み合わせだとWindowsのバージョンアップでいつ動かなくなるか心配です。

Oracle DB 本体は 64-bit のままで、ODP.NET だけを 32-bit にすれば良いはずで、
Windows 10 と Oracle 本体についてはそういう心配は不要かと?
引用返信 編集キー/
■87506 / inTopicNo.9)  Re[1]: ExTextBox について
□投稿者/ にゃるら (20回)-(2018/05/29(Tue) 12:10:26)
No87495 (miya さん) に返信

> VisualBasicで64bitに設定したら、ExTxtBoxのエラーが出てしまいました。

このエラーのメッセージなりが何かを書いてほしいなぁ

> おそらく、ExTxtBoxが32bitだからではないかと思います。

という根拠がエラーメッセージからの推測なのか、32bit -> 64bitへの変更を
したという設定変更をしたことから出ただけのものなのか、これが気になるところです。

ExTextBoxが、

   https://www.vector.co.jp/soft/winnt/prog/se369050.html

であるとすると、単に動作環境に.NET1.1のランタイムが入っていないだけとかかもしれません。


引用返信 編集キー/
■87507 / inTopicNo.10)  Re[2]: ExTextBox について
□投稿者/ 魔界の仮面弁士 (1697回)-(2018/05/29(Tue) 12:44:02)
No87506 (にゃるら さん) に返信
> ExTextBoxが、
> https://www.vector.co.jp/soft/winnt/prog/se369050.html
> であるとすると、

Win32 API 等を使っている様子は無さそうですね。
Microsoft.VisualBasic.dll の StrCmp が使われていたりはするようですが。


っていうか、x86/x64 関係なく、そもそもこのコンポーネント自体に不具合がありますね。
たとえば
 .Format = 空欄
 .AvailableTye = Value
 .Text = 1
の状態にしておいて、ExTextBox にフォーカスが当たると、
それだけで IndexOutOfRangeException が発生するという…。
(内部で「Format プロパティの先頭文字」を読み込もうとして失敗)


> 単に動作環境に.NET1.1のランタイムが入っていないだけとかかもしれません。

.NET Framework 1.1 は
 対応:Server 2008 以下、Vista 以下、NT 4.0 以上、Windows 98 以上
 非対応:Server 2012 以上、Windows 7 以上、NT 3.51 以下
 対応不明:Server 2008 R2
となっていますね。

上記の不具合はさておき、app.config さえ適切なら、
ランタイムが v2.0 / v4.0 でも動作はするんじゃないかな…?
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/migrating-from-the-net-framework-1-1
引用返信 編集キー/
■87508 / inTopicNo.11)  Re[2]: ExTextBox について
□投稿者/ miya (6回)-(2018/05/29(Tue) 13:25:16)
No87502 (魔界の仮面弁士 さん) に返信

> 上記を CorFlags.exe でチェックしてみたところ、以下の結果が返されました。
> .NET 1.x 世代のライブラリかな…? 一応、AnyCPU 扱いのように見えます。
>
> Version : v1.1.4322
> CLR Header: 2.0
> PE : PE32
> CorFlags : 0x1
> ILONLY : 1
> 32BITREQ : 0
> 32BITPREF : 0
> Signed : 0
>
>
> とりあえず、VB (.NET Framework 4.7.2) の x64 ビルドに貼って、
> AvailableType = HalfKana に設定して動かしてみましたが、
> Windows 7 環境では、エラーの再現には至りませんでした。Windows 10 では未確認。

→もう一度はじめからソースを映してきて、AnyCPUで試したらエラーが出なくなりました。
 原因はわからないのですが、解決することができたようです。

 (エラーは、フォーム画面を開いて編集しようとすると、テキストコンポーネントが開けず、
  無視して開くとテキストボックスがなくなってしまう、という事象でした。)
  ※はじめに情報が足らず、申し訳ございません。

 魔界の仮面弁士様、にゃるら様、WebSurfer 様、ありがとうございました!
 

 
 
解決済み
引用返信 編集キー/
■87510 / inTopicNo.12)  Re[3]: ExTextBox について
□投稿者/ WebSurfer (1506回)-(2018/05/29(Tue) 13:58:47)
No87508 (miya さん) に返信

> →もう一度はじめからソースを映してきて、AnyCPUで試したらエラーが出なくなりました。
>  原因はわからないのですが、解決することができたようです。

そうすると、アプリは Any CPU で [32 ビットを優先] のチェックを外してコンパイル、ExTextBox は Any CPU、
ODP.NET は 64-bit とすることにしたと理解しています。

その場合、質問者さんの環境にもまだ多数あると思われる 32-bit OS の PC では、アプリは動かないと思います
が、そのあたりは認識した上でそうすることに決めたのでしょうか?
解決済み
引用返信 編集キー/
■87511 / inTopicNo.13)  Re[3]: ExTextBox について
□投稿者/ にゃるら (21回)-(2018/05/29(Tue) 14:29:15)
No87507 (魔界の仮面弁士 さん) に返信
> ■No87506 (にゃるら さん) に返信
>>ExTextBoxが、
>>https://www.vector.co.jp/soft/winnt/prog/se369050.html
>>であるとすると、
> 
> Win32 API 等を使っている様子は無さそうですね。
> Microsoft.VisualBasic.dll の StrCmp が使われていたりはするようですが。
> 
> 
> っていうか、x86/x64 関係なく、そもそもこのコンポーネント自体に不具合がありますね。
> たとえば
>  .Format = 空欄
>  .AvailableTye = Value
>  .Text = 1
> の状態にしておいて、ExTextBox にフォーカスが当たると、
> それだけで IndexOutOfRangeException が発生するという…。
> (内部で「Format プロパティの先頭文字」を読み込もうとして失敗)

Enterのイベントハンドラから呼ばれているところでLengthチェックがないですね。
他ではされている箇所もあるのでちょっとしたミスっぽいですね。

IsNumericからのParseとか.NET1.1のときの文字列->数値変換の苦労が感じさせる処理がいろいろ。
よく出来たコードだな、とは思います。

作者様の最後のブログで.NETを離れられておられるようなので、うーん、残念ですね。

>>単に動作環境に.NET1.1のランタイムが入っていないだけとかかもしれません。
> 
> .NET Framework 1.1 は
>  対応:Server 2008 以下、Vista 以下、NT 4.0 以上、Windows 98 以上
>  非対応:Server 2012 以上、Windows 7 以上、NT 3.51 以下
>  対応不明:Server 2008 R2
> となっていますね。
> 
> 上記の不具合はさておき、app.config さえ適切なら、
> ランタイムが v2.0 / v4.0 でも動作はするんじゃないかな…?
> https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/migrating-from-the-net-framework-1-1

基本はいじらなければ動作するのですが、明示的に.NET1.1のランタイムの動作を期待して

<supportedRuntime version="v1.1.4322" />

だけを入れて、でもランタイムのインストールミスっていう「ポカ」もあるかも、と思ったもので。

とりあえず動かす、というところまでは解決されたようなのでよかったです!

解決済み
引用返信 編集キー/
■87512 / inTopicNo.14)  Re[4]: ExTextBox について
□投稿者/ miya (7回)-(2018/05/29(Tue) 16:32:15)
No87510 (WebSurfer さん) に返信

> その場合、質問者さんの環境にもまだ多数あると思われる 32-bit OS の PC では、アプリは動かないと思います
> が、そのあたりは認識した上でそうすることに決めたのでしょうか?

→おっしゃるとおりです。当業務アプリの利用環境はすべて64bitのOSに統一する予定です。
引用返信 編集キー/
■87516 / inTopicNo.15)  Re[4]: ExTextBox について
□投稿者/ Azulean (954回)-(2018/05/30(Wed) 07:24:31)
ある程度解決策は見えたのかもしれませんが、Windows Forms アプリケーションで x64 対応する場合の経験談として書いておきます。

・View/UI 層は AnyCPU か x86 でなければならない。
・View/UI 層はネイティブ資産やプラットフォーム(x86/x64 など)依存要素と直接結合させず、実行時に注入(DI)する・バインドする路線で設計するべし。


Visual Studio は 32bit プロセスなので、その中で実行される Windows Forms デザイナーも 32bit で動きます。
Windows Forms デザイナーはユーザーコントロール、あるいは継承コントロールを配置・表示する際、そのコントロールが含まれるアセンブリをプロセス内に読み込みます。
しかし、32bit プロセスでは 64bit アセンブリを読み込めないので BadImageFormatException が発生し、デザイナーが表示できなくなるという流れになります。

64bit プログラムを開発される場合であっても、最低限 View/UI 層は AnyCPU を保たないと、開発がとても厳しくなるでしょう。
(できれば、ほとんどの部分を AnyCPU にして、最小限のプラットフォーム依存プロジェクトと exe プロジェクトだけを x86/x64 にした方が良いと思っています)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -