2015年10月24日土曜日

VB6からVB.NETへ移行する(2)

間が空いてしまいましたが、前回の続きで、残ったAxMSDBGridについてチャレンジします。

エラー内容を見てみると、CtlRefresh()はメソッドにないとのこと。該当箇所を見てみると、移行時のコメントがついていて、RefreshをCtlRefreshにアップグレードしたとのこと。
試しにRefreshに戻してみるとエラーは消えました。
とりあえず、これはこれで対処済とします。

残ったコンパイルエラーは、移行元のVB6ではVB.Dataのようでした。これが、アップグレードウィザードではSystem.Windows.Forms.Labelに移行されてしまっているようです。
元のソースでは、DBGridとの連携用に用いられているようです。
ちなみに、赤ラベルに移行されるのはウィザードの仕様のようです。
アップグレードレポートとアップグレードコメント

DBGridについてGoogle先生に聞いてみると、以下に回答が。
VB6.0→VB2005移行】 DBGridとDataコントロールの移行
Visual Studio 2008用にVbソースを変換するには?

結論的には、.NETのDataGridに移行しろ、とのことらしいです。
他方、DBGridのほうは、MSDBGridに移行されているようなので、こちらで対処できればいいような気もします。

とりあえず動作を確認するため、いったんコメントアウトして実行してみます。
画面を表示してみると、画面のメニューが表示されていません。この辺の位置調整は必要そうです。
適当にメニューを選択して実行してみると実行時エラー。対象箇所を見てみると、UPGRADE_WARNINGが記載されていて、「Panelsの下限が1から0に変更されました」とのこと。要するに、配列が1から始まっていたものが、0から始まるようになったということですね。この点もアップグレード・ウィザードでは自動修正してくれないので、警告についても1つ1つ修正していく必要があるようです。
やはり、アップグレード・レポートを見て対応していかないといけない。

先が長そうなので、ここで休憩。

2015年10月11日日曜日

VB6からVB.NETへ移行する(1)

VB6とOCX、Visual Studio 2005が入っている環境を入手したので、そこでVB6からVB.NETに、無謀にもアップグレードウィザードを使って移行にチャレンジ。今回は、どのような問題が出るか、の抽出が目的です。

まずはOCXを使ってなさそうな小さなアプリケーションから試してみます。今回は無事変換完了。

Visual Studio上では11個のエラーと7個の警告。まずまずの数字です。
出力先に、アップグレードレポートファイルが生成されていたのでこちらも確認。こちらでは、コンパイルエラーが11個、デザインエラーが118個、警告が82個。
両方ともエラーが11個で一致しているように見えますが、詳細を見るとエラー内容が異なります。

Visual Studio上のエラーは、大別すると次の通り。
  • AxMSRDCのメンバーではない
  • System.Windows.Forms.Labelのメンバーではない
  • Meを代入式のターゲットにすることはできない
  • LenB/MidBは宣言されていない
  • vbFromUnicodeは宣言されていない

他方、 アップグレードレポートファイル上のエラーは、大別すると次の3パターン。
  • 一部の定数はアップグレードされませんでした(vbFromUnicode)
  • 一部の関数がサポートされていません(LenB/MidB)
  • マウスのカーソルをカスタムポインターに設定できません

とりあえずコンパイルできるようにするには Visual Studio上のエラーを潰す必要がありますが、アップグレードレポートファイルの方が本当に修正していくには参照するのに都合がよさそうです。

まずは両方に共通しているLenB/MidBについて調査。
VB6のLenBと同じ事を行うには?
文字列の一部をバイト単位で取り出す (LeftB, MidB, RightB)
VB.NET LeftBの代用

いろいろと皆さんの対処方法があるようです。とりあえず、このあたりは共通クラスを作ってその中に入れるようにします。

続いて、共通しているvbFromUnicodeです。
こちらも共通関数化してしまいます。
Equalivent of VB6's vbUnicode in NET?
[RESOLVED] [2003]vbFromUnicode Equivalent

後は、Set Me = Nothingについてですが、これはとりあえずコメントアウトすることに。
'Set Object = Nothing'... do you still do this in VB.net????
Question : Do you still use 'Set Object = Nothing' in VB.NET?


今日のところはここまで。



2015年10月10日土曜日

AndroidでNFCから情報を取得する

NFC搭載のAndroidについて、NFC経由でデータ取得する依頼がありました。

NFCについてまったく知らないので、 いつも通りGoogle先生に問合せ。
Near Field Communication

android.nfc

上記を見ると、API9から実装されているよう。
Android3.0/4.0以降で変更されていないか、要チェック。まあ、UIではないので変わっていない可能性が高いけれど。。。

日本語でNFCサンプル説明があったのでこちらも参照のこと。
AndroidアプリでNFCタグを読み書きするための基礎知識


とりあえず、NFC対応の実記を入手&通信お作法を勉強することに。
あと、これってエミュレーターでテストできるんだろうか。
とりあえずググっておいたのをメモしておく。後で読もう。
How to test NFC api?



VBを移行するには

ひょんなことから、今時、VB6を移行することに。

手元に、Visual Studio 2008の環境があったので、念のため移行できるか確認。
Visual Basic アップグレード ウィザード

移行できそうです。VB6のソースを持ってきて、コンバージョンを試行。

「アップグレートに失敗しました : 例外が発生しました : 参照されたコンポーネント SPR32X30.ocx にデザイン時のライセンスがありません」

のエラーが出て終了。
なるほど、確かにスプレッドOCXを端末に入れていません。しかし、Spread OCXって、むちゃくちゃ懐かしい代物です。

仕方がないので、OCXを使ってない別のアプリケーションで再度試行。

「アップグレートに失敗しました : 例外が発生しました : 参照されたコンポーネント Status Bar にデザイン時のライセンスがありません」

のエラーが出て終了。
うーん。普通のVB標準のコントロールでも駄目なのか。
調べてみると、以下の状況のようです。
Visual Basic アップグレードウィザード ラインセンスでデザイン時のライセンスがありませんのエラーが発生する
うまくレジストリを操作すれば『デザイン時のライセンス』があるように見せることが出来そうです。
しかし、 レジストリ設定ファイルは、2002か2003にしか同梱されていないようです。
Visual Basic 6.0 のコントロールを Visual Studio .NET で使用するとエラーが発生する

あと、そもそもアップグレードウィザードを使うべきかどうか、についてはいろいろとあるようで。まあ、100%の移行は無理なので、どの程度機械的に出来るか、ですね。
Visual Basic 2005へ移行する理由(後編)
第2回 私はコレで、VB 6を卒業しました


ちょっと混乱してきたので、今後の進め方は次回以降に考えることに。

2015年10月3日土曜日

AndroidからGoogle Playにつながらない

とある確認をしようとして、しまってあったアンドロイド端末を取り出してきました。
長らく放置していたため、電池切れだったので暫く充電して操作してみます。


。。。Google Playに繋がらない。
パスワードを聞かれて入力するのですが、ネットワークエラーになります。

おかしいなーと思って、確認しましたが、家の無線LANとは接続できています。
ブラウザを起動すると、Googleとは問題なく表示できました。
 ただ、いくつかのサイトで、証明書が認証できない、といったメッセージが。


古い2.3.3のOSなので、もう使えなくなったのかな、とも思いつつ、念のため調べてみました。
[Android]Google Play ストアに接続できないときの解決策
Playストアに接続できない時に試して欲しい10のこと


日付が初期化されていたので、自動設定を解除して手動で現在日時を設定。

これで再トライすると、問題なく接続できました。
少し勉強になりました。

2015年10月2日金曜日

Office 2003でXLSXを使う

担当しているプロジェクトで、メンバーから以下の要望がありました。

・プロジェクトルームで印刷をしたい
・プロジェクトルームで印刷をするには、開発端末からの出力になる
・開発端末にはOffice 2003がインストールされている
・なので、XLSX等のOffice 2007以降のファイルフォーマットのファイルが扱えない
・XLSに変換するとずれたりするので、Office 2007以降を購入してほしい


開発環境が数年前の状況で、新開発環境になるのにあと数ヶ月の辛抱なのですが、生産性に関わるのであれば対処しなければいけません。

Officeライセンスを購入しなきゃーと思っていたのですが、以前、自分の会社のPCでは、Office 2003の環境でXLSXファイルを扱えたような。。。少なくとも見れたような。

ということで調べてみると記事がありました。
how to open .docx and .xlsx. using office 2003?

誘導されてこちらのサイトからダウンロード。
Word/Excel/PowerPoint 用 Microsoft Office 互換機能パック

無事、使えるようになりました。めでたしめでたし。
なお、英語の記事にあるとおり、前提パッケージを導入しないと動かなかったので、その点は要注意。