VC++6 を VS2019 にコンバート時のポイント

VC++6 のアプリは、インストーラレスで動作させることができるため、今日でも需要があります。しかしIDEの機能が低いため、開発効率は低いです。そこで弊方では、一度Visual Studio 2019 にコンバートして開発し、最後にVC++6で検証してリリースしています。その時のポイントの覚書です。

Visual Studio 2019 の設定

VC++6の頃は.NETはまだなく、標準ライブラリは MFC でした。Visual Studio 2022となった現在でもサポートされています。2000年当時、現在も名だたる数々のアプリが作成されました。オプション機能になっいるので、以下のようにオプション追加します。尚、無償版ではサポートされていません。


Projectのコンバート

vc++6 のproject file : .dsp.dsw を、Visual Studio 2019 で開きます。後は、質問に答えていけば完了です。.sln .vcxproj が生成されます。


コードの修正

C++ のコンパイラ仕様がやや特殊であったため、(汚いコードを書いていると)修正が必要になります。

【違い1】 VC++6では関数/method内で宣言した変数は、その後スコープを跨いで使用可能となっている。

具体的には、

void founcA( )
{
    for( int i = 0; i < 10; i ++ ) {
         .....
    } 
    for(  i = 0; i < 20; i ++ ) {  /* VC++6ではOK、VS2019とC++一般ではNG */
         .....
    } 
}

【違い2】 VC++6ではcastしなくても、引数の型に合わせてくれる。

具体的には、

void funcA( int x, int y )
{
   ....
}

void funcB( )
    LONG y1;
    ...
    funcA( 100, y1 );  /* VC++6ではOK、VS2019とC++一般ではNG */

数値だけでなく、char[]CString 間でも暗黙castされているので要注意です。数値を表示用に文字として扱う場合も同様です。

【違い3】 VC++6では関数/method型を宣言しないと、intとして扱われる。

具体的には、

virtual CString methodA();
virtual methodB();    /* VC++6ではint扱いでOK、VS2019とC++一般ではNG */

また strcpy系の関数にて以下の警告がでますが、領域外の上限をコード内で実装していれば問題ないので許容します。


Build設定の変更

Debug ビルドで以下のエラーが出る場合があります。

“/Gy-” は “Gy”オプション無し の意です。 以下のように有効にします。オプションの意味合い上、実害はないでしょう。


以上これでコンバートでlinkageまでとおります。これで.NETのC++並みのデバッグ機能が使用できるようになります。最近のVisual Studioのプラグインも使用できます。

ただし生成されたexeを他PCで実行する場合は、各Visual Studio バージョンに対応した VC++再配布可能ライブラリ が必要です。mfc42.dll では動きません。

最後に一言、.NETアプリでないと「セキュリティが!!」と怒り狂う方や、.NETコンバートを強く勧めるベンダーさんももいらっしゃいますが、MFCはまだ使えるしセキュリティも配慮されています。一度作ったコードは大事に継承し続けたいですね。

nRF52840の開発環境を作成する’24.10月編

二年前、Nordic Semiconductor社のBluetoothマイコン: nRF52832 のプログラムを作成しました。国内メーカのBluetoothマイコンより安価で多機能、豊富なライブラリ、処理スペックも上で弊方の中では高評価でした。(ただし情報が全て英語にはなってしまいますが、、、) 今回新しい企画でBluetooth通信を行うため、上位マイコンnRF52840 を選定しました。こちら Long Range に対応しており離れた車両と通信接続時間の長さ期待できます。 2年前とは手順も増えて複雑、違いも大きかったのでその覚え書きです。


2年前は、汎用の組込み用IDE: SEGGER (セッジャーと呼びます、セッガーかもしれません) のNordic Version 5.60 が使えていました。現在Version 5.68としてここで配布はされていますが、以下のようには、エラーが出たり、ライセンス発行画面が真っ白です。

WEB上の一般記事に、VS Code + Nordic Extension のみになったと記載がありました。


環境セットアップには python が必要です。指定されたエディションを使う必要があるようです。少なくとも Microsoft Store で配布しているものは以下エラーが出ました。


DevZone : ユーザ登録システム、登録しましたが、ログインしてなくてもインストールは可能でした。

Zephyr : 標準ライブラリ?


基本は以下のとおりですが、公式手順を見ると、どこまでが自動でどこが手動か分かりにくいです。弊方では一部エラーが出ていたため手入力でも一通り実施しました。

1. J-Link (PCとマイコンと接続するためのインターフェイス ) は nRF Connet SDK でインストールされるため事前インストールは不要。

2.VS Code のインストール。最新でOK。

3. nRF Connet Desktop をインストール。

4. nRF Connet Desktop からnRF Connet SDK をインストール。この時、VS Code の未インストールだと進めません。v2.7.0は以下のエラーが発生、v2.6.2をインストール。なお2年前とくらべ SEGGER のインストールメニューは消えています。

5. nRF Connet Desktop からnRF Command LineTool をインストールを促され、ダウンロードベージに飛ぶので、D/Lしてインストールします。後から入れてもOK。

6. chocolatey というWindow用のパッケージマネージャをインストールします。まずnuget.exe (Visual Studio用機能追加の仕組みのコマンドライン版)をダウンロードし、以下のコマンドをたたきます。

7. chocolatey を用いて、python など必要パッケージをインストールします。何なのかは理解していません。

phtyon は、nRF Connet SDK で自動で以下にインストールされている模様。今回は公式手順どおりに、chocolatey で入れたものを使用しました。

8.python の pip3 を用いて、指定されたパッケージをインストール。以下コマンドラインシーケンスです。

9.ARM 用gccをダウンロードして、指定場所に配置。弊方は配置自由度のあるzip版を選択。

10.Windows上で、gccのパスを通す。

11.VS Code に Nordic 用Extensionを追加します。nRF Connect For VS Code Extension Pack でまとめられています。それを開いて追加します。

以上、たいへんな長旅でした。


1.VS Code に左ペインの nRF Connet アイコンを選択し、現れるツリーからProjectを作成します。

2.以下のようにProject名を入力。

3.APPLICATIONのツリーから、Build構成以下のように生成します。

4.生成されたProject全体の様子は以下のとおりでした。2年前 nRF52832 で SEGGER で作成したコードを流用しようと考えていましが、ライブラリの構成が全くちがうように見えます


今回はプロトで過去のHowToを流用して手早く準備したい。ゆくゆくは製品化時に最新化することとし、既存のSEGGERにて nRF52832 の.Project file を、nRF52840 の.Project file に手動マージし対処しました。

WinCvsのpserver設定

現在WinCvsの設定情報中々ないので、その設定覚書です。

Windowsのコンピュータ名とアカウント名を設定します。リポジトリエリアス名は次のように設定します。

コントロールパネルから、CVS For NT を選びます。CVSNT画面から「設定変更」ボタンを押したあと、リポジトリタブを開きます。そこでWindowsパス名に対するエリアス名を設定します。

コントロールパネルから、CVS For NT を選びます。サービスの状態タブを開き、開始ボタンを押します。CVSサービス CVSロックサービス の2つがあります。 ロック の方は開始できないときがあるようですが気にしない。

開始状態は、Windowsサービス画面でも確認できます。

リポジトリがローカルであってもログインしないアクセスできません。WinCvsのメニュー 管理 -> ログインを選びます。ログイン画面からOKボタンをおし、パスワード画面を出します。ここでWindowsアカウントのパスワードを入力します。CVSは、UNIX系の産物なので別設定するのかと深読みをしないこと。

成功すると何もメッセージがでません。エラー時のみメッセージがでます。

WinCVSでユーザ不一致でcommitできない場合

弊方では CVS を使いつづけています。理由は、SVNGit はファイル単位で管理できないためです。CVSは ソースファイル.v で管理され、.vファイル 単位でコピー削除移動が可能。.vファイル はテキスト形式なので、壊れても直せる。各パスのCVSディレクトリの管理ファイル Entries / Repository /Root をもシンプルなので直接いじりやすい。Windows上では、WinCVS および CVSNT を用います。いまはどこで配布されているのかはよく分かりませんが、昔とっておいたものを使いつづけています。一応、Windows11 でも動作しています。

たまにしかセットアップしないのでその覚え書きです。


さてWinCVSで、コミット時、急に以下のようなエラーが発生するようになりました。

cvs commit: user ‘ユーザ名’ is not a valid editor of the file ‘対象ファイルl’
cvs [commit aborted]: correct above errors first!

弊方では、リボジトリはローカルPCに pserverアクセスです。しかし、一部local参照しているProjectもあるため、リボジトリディレクトリを、Windowsのシンボリックリンクで割り当ててます。その関連で、何かWindowsの仕様がかわったのでしょうか?

pserver から localアクセスに変更しても変わらず。リボジトリのWindows上のユーザ権限を見直してもダメ。結局原因は以下でした。

しょうもない原因でした。

e2studioでRH850F1KHを使うときの注意

弊方では、CS+ より e2studioの方を優先して使ってます。eclipceの機能や各種プラグインが使え(特にvim)効率が高く、CS+ と対マイコン機能も遜色ない。ただマシンパワーが少々必要です。

今回、RH850F1KHを使うにあたり気付いたことをメモです。正しくはリリースノートに記載されているとは思います。今日のところはCC-RH無償版です。

e2studio 2022-10 では未対応

組込みのセオリーではありますが、他案件でこのバージョンを使っているためUpdateしたくないのですが、未対応でした。以下詳細です。

ヘルプ -> e2studioについて -> インストールの詳細 -> Renesas Device Support から対応マイコンを確認するとツーリーには現れますが Debug 以外はNo がついています。どういう意味なのでしょうか? もしかしてCC-RH無償版ではNG!?

ファイル -> 新規 -> Renesas C/C++ Project -> Renesas RH850 -> Renesas CC-RH Executable Projet と選択し、プロジェクトダイアログ 名を入力、次のダイアログでターゲットデバイスの「」をクリックし、Device Selection画面からは F1KH はでてきませんね。

昔昔は、マイコン毎に「デバイスファイル」がデリバリされていて、それをIDEにインポートしてましたが今はそうではないんですね… ルネサスダウンロードを探しても見つかりません。

しかたなくアップデートを試みましたが、JDK環境エラーになりました。

互換は、JDK17 でPCには JDK18 がいれてあります。JDK18 は認識されず OpenJDK が認識され引っかかっています。JDK17/18は今はOracleの管理下のプロダクトで、OpenJDK はそれとは違う管理されていないもののようです。e2studio 2022-10 に以下のように一緒にインストールされていたみたいです。

e2studio 2024-07 では対応

JDKの環境も、e2studio 以外にもいろいろ影響が考えられるので、比較的クリーンな別PCに最新版2024-07をインストールすると、F1KHでプロジェクト生成ができました。以下詳細です。

Renesas Device Support の対応マイコンツリーは以下のとおりでした。

プロジェクト生成時のDevice Selection画面の内容は、

一応ひな形自動生成ツール スマートコンフィグレータ で自動生成し、まだ基板は工作中なのでRH850シュミレータ で実行までしてみてOKでした。シュミレータの簡単な設定方法は以下のとおりです。

RH850コンパイラ状況

とりあえず今からコンパイラ要購入でなくてヨカッタです。

ちなみに CC-RH は C++ 未対応なんですね。C++はサードパーティ製のみ。

gcc も RL78、RX系、V850は対応してますが、RH850は無いようです。

C++ で効率よくつくりたいものです。

e-taxで累積赤字決算申請する3:市町村向け

前記事では都道府県への申請を行いました。

つづいて市町村への申請をします。

PCdesk(DL版) を再起動し、市町村用のアカウントでログインします。右上の納税者切替ボタンはうまくいかない感じです。あとは県の場合と同じです。

作成する申請書は、「第二十号様式」のみです。この留意点は、この申告の基礎 は入力してはいけません。年号が選択できるようになっていますが、ついつい触ってしまわないように気を付けます。

従業員数、期末現在の資本金額、右下のチェックボタン3つ、決算日 を入れておいています。

納税情報の申請時には、税目区分法人市町村民税 に切り換えて検索する必要があります。

その他

起業初年度で、起業月の途中日から開始した場合は、均等割の計7万円が日割りで割引かれます。初年度は知らずに申請しましたがシステム上チェックはかかりません。後から、県の方から手紙が来て返却されました。県の方から「市の方も申請すれぱ返却できるはず」と言われいすました。(市からは特に連絡なし)

まとめ

eLTAXの操作は、余計な画面や確認が多くて難しいです。しかし手書きして税務署に行くよりははるかに効率的ではあります。しかしながら、操作がWEBだったりPCアプリだったり、国用と地方用が別だったり、一つにまとめれば開発費も減り、税金も大事できたのにと思う次第です。

Xperia Z4 Tablet LTE海外版をAndorid11相当にUpdateする【’24.9月編】

めずらしい Xperia Z4 Tablet LTE海外版 SGP771 をAndorid11相当にカスタムROM化時の、国内版である SO-05G との違いを報告いたします。

カスタムROM化の鬼門である “Bootlooder Unlock Allowd” は、海外版では下記のとおり YES でした。これを No → YES にする必要はないです。SO-05G では現在解除サービスが無くなってしまいカスタムROM化不能ですが、 SGP771 をは可能ということになります。

Bootloader を unlock するコマンド “fastboot oem unlock” にて、以下のようにCommand not allowed” という見慣れないエラーが発生し unlock できません。Z3 Tablet Compact 海外版ではすんなりunlockできていたのですが、、、

海外の投稿を拝見すると、まれに発生するようです。その投稿には中途半端な状態で端末初期化すると、unlock解除コードが変わってしまうなど記載があり、根本解決策まで記載されていませんでした。

たまたまfastbootのUIツールでいじくりまわしていて解除できました。手順は以下のわうに一度relockし unlock するものでした。

このあと純正OSを起動して、”Bootlooder Unlock Allowd” を確認します。以下のように上手くいっていました。しかし通常 unlock が成功するとOS起動時に自動初期化が走るのですが、この時はそれが走らなかったです。

SO-05G と同様に OpenGapp をLinageOSと一緒にインストールしましたが、Googleアカウント追加でログイン画面のあと真っ暗になります。OSの Googelメニュー と Google Play も表示が以下のような異常になりました。カスタムROM自体はSO-05G と同じですものです。

OpenGapp は最終更新日が、’22.5月 と古くてGoogleサーバと互換がなくなってしまったようです。

LinageOS公式のGapp MindTheGapps  をインストールします。mobile Android TV がありますが、mobile: MindTheGapps-11.0.0-arm64-20230922_081122.zip を入れました。もしかするとOSはこれより古いもので、*MicroG*と命名されたzipのものが、互換性があるのかもしれません。

これまでのGappは必要そうなものが一式インストールされていましたが、MindTheGapps  でインストールされるアプリは、Google(サービス)Google Play だけで、あと必要なものは Google Play からインストールしろというポリシーです。

しかしこのままだと Google Play は正常動作しません。Google 更新で Google Play は起動可能になりますが、何か操作すると落ちます。以下の追加手順が必要です。

試しに Google MAP を入れてみます。インストールできました。動作させるには端末再起動をしたほうが良いようです。

MindTheGapps をインストールしても Google Playが現れない場合、一度OSから入れ直し、先にOpenGappをインストールしてから、MindTheGapps をインストールすると上手くいく場合があるようです。SPG612、SPG621など他機種でも同様の傾向があるようです。

Z3 Tabletでは怪しかったGPS動作を、GPSTESTアプリにて再確認してみます。反応もよく調子いいようです。


以上、SGP771 を Android11相当にupdateし、Google Play の動作させ手順です。しかしながら自分でやるのはメンドクサイ、忙しい、自身が無い方は、弊方でセットアップをお受けいたします。Google Paly初期セットアップに手間をようするため難易度中、約1.25時間の個人様向け工数+事務費で税込4,000円~ 。ご相談、依頼はこちらから。

Dainese ライディングシューズ にシフトガードを追加する。

趣味や得意なことを事業化できれば効率的です。簡単な自動車用品を加工をできないか模索しています。


Dainese ライディングシューズは履き心地がよく、デザインも良好です。しかし最近のモデルはシフトガードがありません。(過去モデルで樹脂がことごとく四散するからかも?) シフトレバーがゴムでカバーされている車両はこれでよいですが、金属直の車両ですとちょっと痛いですし、汚れがめだってしまいます。そこでシフトガードを追加してみました。対象は夏用シューズです。

素材は ビブラム というイタリアメーカの補修用靴底の余りを厚さ5mm程度削ったものです。

接着だけでは耐えない可能性があるため、革用糸を使い特殊な技法で縫ってあります。

効果はテキメン、柔軟性もあるため歩行にも支障はないです。しかし一回目はまたまだ下手です。次に冬用にも施す予定です。

このようなカスタムサービスはいかがでしょうか? ご意見お待ちしております。

MAC上でVS2022でbuildできなくなった件

前回記事にて、MAC OS14 / Xcode 15 / Visual Studio 2022 for MAC で、iOS17対応でXamarinアプリのBuild / TestFlight までできることを確認しました。’24.4月の事です。

しかし諸事情で MAC を再初期化しました。その後、iOSプラットフォームで以下のように現在’24.7月 Build が通らなくなりました。

エラーは、The type or namespace naname interface名 could not be found (a you missging a using directive or un asssmbly reference? ) (CS00246)

Xamarinで 各固有処理を作る場合、プラットフォーム共通部で interface を定義し、各OS固有部側で interface名で、固有部処理クラスを継承します。その interface 名 が未定義だと言われてます。どう見ても合っています。同じコードでVS2019 for MACでは通ります。Xcode側の影響でしょうか??? VS2022 For MAC のサポート終了直前で手間の掛かりすぎるApple対応で心が砕けてしまったのでしょうか?

解決策は、VS2022 Windows でビルトすることでした。

しかし、TestFlight も Windows側で、buildする必要があります。以下のポイントがありました。VS2019から大分進化しているようです。

ビルトがずっと終わらないのでMAC側をみてみると、パスワード入力待ちになってました。これを入力するとすすみます。

デプロイ メニューで行います。

TesFlight 用にBuildするには、MAC側の証明書、プロビショニングプロファイル が必要です。MAC側の証明書をExportします。その手順はこちら。ここでExport時には必ずパスワードをかけます。これはVS2022側が必ずパスワードを要求してくるためです。

VS2022から [ツール] -> {オプション] -> [Xamarin] -> [Appleアカウント} を開き。チーム一覧から自分のチームを選んで[詳細の表示] を選びます。以下のように詳細画面から[証明書のインポート]を選びます。尚、コントロールパネルの証明書からimportしても効かなかったです。 いちおう[すべてのプロファイルをダウンロード]も実施しておきます。

プロビショニングプロファイルは、注意が2点ありました。

  • Windows用VS2022の特有機能と思われる「自動プロビショニング」は、既にMAC側でプロビショニングプロファイルを作っていた場合は使いません。
  • adHoc用のプロビショニングプロファイルを作っていると自動認識でそちらが優先されてしまうようです。adHoc用はApple Developr WEBページから削除しておく。

iOSプロジェクトのプロパティの[iOSハンドル署名]の設定例は以下の通りです。

TestFlight の IPA を生成するには、[ビルド] -> [アーカイブ]を選びます。後は以下のような流れです。

MAC側で、MAC側のパスワードを入力。

しかし App Store へのuploadは失敗しました。

IPAファイルはWindows側に生成させるので、IPAをMAC Book にコピーして、Transfar アプリ で upload は Ok でした。 オチはありますが、操作性最悪MACを触る量が減ったのでヨカッタです。

TestFlightが届かないとき

前記事はこちら

TestFlight はどうも気まぐれです。ユーザさんから「招待が届かない」とクレームが沢山です。単純確立は1/5程度です。なんででしょう??? 注意点と対策です。

必ず別メールにて、招待した旨のメールをだしましょう。


この場合は、高い確率でTestFlightの招待が失敗する傾向があります。具体的な事象は、

開発者側から招待は成功し、「招待済み」の表示になるのですが、テスト者に招待が届かない

です。たたWEBページ低応答と同事象が常用的に発生してしてただけかもしれません。


再招待のボタンがあったので使ってみました。この時は効果はなかったです。


以下のようにパブリックリンクを有効にして、制限人数を設定し、URLコピーをテスト者にお送りします。こちらは有効な手段です。ただApple 審査が終わっていないとテストはできないため、Apple側の問題で招待がとどいていない場合のみ対策となります。

テスト者にコピーしたURLをメールで送る。


弊方では効果不明でした。