mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

VS2019でGoogle TestとGoogle Mockを導入する

C++単体テストをやりたいから、Google Testプロジェクトテンプレートを使ってテスト環境を整えてみるよ!

Google TestとGoogle Mockってなに?

Google Test ユニットテストフレームワークの 1 種です。正式名称は、Google C++ Testing Frameworkといい、開発環境に依存しないテストができるようになります。
Google Mock モックフレームワークの 1 種です。正式名称は、Google C++ Mocking Frameworkといい、モックオブジェクトを作成できるようになることで、より柔軟なテストが可能になります。

参考:Google Mock:はじめの一歩 (1/2):CodeZine(コードジン)

Google Test プロジェクトテンプレートを使えるようにする

Visual Studio Installer を起動して、[C++ によるデスクトップ開発]の[Test Adapter for Google Test]にチェックをつけてインストールする。
f:id:mogmo811:20201113094701j:plain
参考:docs.microsoft.com

Google Testプロジェクトテンプレートを使って新規プロジェクトを作成する

Visual Studio 2019を起動して、[Google Test]を選択し、[次へ]をクリックする。
f:id:mogmo811:20201113094905j:plain

プロジェクト構成を設定して、[作成]をクリックする。
私の場合、プロジェクト名は「テストするプロジェクト名 + "Test"」とすることが多い

Google MockをNuGetパッケージからインストールする

[ソリューション エクスプローラ]から先ほど追加したテストプロジェクトの[参照]を右クリックし、コンテキストメニューから[NuGetパッケージの管理]をクリックして[Nuget: (プロジェクト名)]タブを開く。
[参照]タブで"googlemock"を検索し、ライブラリをダウンロードする。
今回は 「googlemock.v140.windesktop.static.rt-dyn」の安定版「Ver. 1.7.0.1」をインストールした。
インストール後の[Nuget: (プロジェクト名)]タブの[インストール済み]タブは下のような画面になる。
f:id:mogmo811:20201113095357j:plain

フォルダ名を変更する

googlemock.v140.windesktop.static.rt-dyn の場合、パッケージのincludeディレクトリの直下のフォルダ名が「gtest」になっているので、「gmock」に変更する。

gtest.hとgmock.hをインクルードする

テストプロジェクトのcppファイルに下の 2 行を追加してビルドが通れば導入準備は完了です٩(ˊᗜˋ*)و

#include "gtest/gtest.h"
#include "gmock/gmock.h"

参考サイト

opencv.jp
qiita.com



ではまた🍙

CString引数の渡し方

12月までMFCのアプリを作ることになりました。
@mogmo1012です。

久しぶりにMFC触るとCStringの扱いかたをいつも忘れてしまう……

値渡し (CString text)

そのまま書くと値渡しになる。
長い文字列を渡すとメモリ食う。

void CSampleClass::A(){
    text = "aaa";
    Convert(text);
    std::cout << text << std::endl;
    // output: "aaa"
}

void CSampleClass::Convert(CString text){
   text = "bbb"
}

参照渡し (CString& text)

引数に値を渡せば、その変数のアドレスを使って処理してくれる。
関数内で書き換えたくない場合はconstをつける。
例)foo(const CString& text)

void CSampleClass::A(){
    text = "aaa";
    Convert(text);
    std::cout << text << std::endl;
    // output: "bbb"
}

void CSampleClass::Convert(CString& text){
   text = "bbb"
}

値渡し、ポインタ渡し、参照渡しについて

参考URLを2つ張っておきます。
cpp-lang.sevendays-study.com
qiita.com

AppleScript|Finderで右クリックから新規ファイルを作成する

こんにちは。もぐも(@mogmo1012)です。
最近macを買いました。20万…高かった…🥶

それはさておき,最新版のmacOSには,Windowsエクスプローラー上でファイルを新規作成する機能が無いみたい。解決策を探していたら,AppleScriptを使えば条件付きで実現可能であることがわかったのでメモしておきます。✍️

スクリプトだけ見たい方は2-5節を読んでね。

txtファイルのみ対応する場合

こちらのサイト様が参考になりました。
とても丁寧に解説されています。
wordpress.ideacompo.com

拡張子対応版に修正

上記のコードでは拡張子が.txtしか対応していなかったので,拡張子も入力できるようコードを修正してみました。

1. Automatorを起動

Automatorを起動します。
f:id:mogmo811:20200815090947j:plain

2. ワークフローファイルを新規作成

メニューから「ファイル」>「新規」を選択してファイルを作成します。
f:id:mogmo811:20200815091212j:plain

3. 種類をクイックアクションにする

「クイックアクション」を選択して「選択」をクリックします。
f:id:mogmo811:20200815092816j:plain

4. AppleScriptを実行する設定にします。

「ワークフローが受け取る現在の項目」:「ファイルまたはフォルダ」に設定
「アクション」:「ユーティリティ」>「AppleScriptを実行」をドラッグ&ドロップ
f:id:mogmo811:20200815093854j:plain

5. スクリプトを記述

仕様
  • "."がない文字列の場合は,拡張子を".txt"としてファイルを作成する。
  • 文字列に"."が含まれる場合は拡張子ありのファイル名が入力されたと認識して処理を行う。
  • はじめに出現する"."以降の文字を拡張子とする
  • "."から始まるファイル名は作成できない
  • ":"を含むファイル名は作成できない
処理の流れ

ざっくりと処理の流れを説明すると...

  1. デフォルトファイル名"noname"でファイル名入力画面を表示する
  • 入力したファイル名の検証する
    • 拡張子なしの入力と判断した場合,入力文字列+".txt"をファイル名とする
    • 拡張子ありの入力と判断した場合,そのまま処理を続ける
  • 重複ファイルがあるかどうか検証
    • ある場合はファイル名と拡張子の間にインデックス番号を追加
  • ファイルを作成
  • 重複によるファイル名変更を行った場合は,通知画面を表示する
スクリプト全文
(* reference: http://wordpress.ideacompo.com/?p=10886 *)
property defaultFileName : "noname"

on run {input, parameters}
	try
		tell application "Finder" to set the sourceFolder to (folder of the front window) as alias
	on error
		-- no open folder windows
		set the sourceFolder to path to desktop folder as alias
	end try
	
	try
		-- ファイル名入力画面を表示
		set flagErrorInput to true
		repeat while flagErrorInput
			tell me
				activate
				set newFileName to text returned of (display dialog "Enter new file name" default answer "" & defaultFileName)
				-- ファイルの検証
				set dotPosition to the offset of "." in newFileName
				set colonPosition to the offset of ":" in newFileName
				if (dotPosition = 1) then
					display alert "\".\"で始まる名前はシステムだけが使用できます。別の名前を指定してください。" as critical
				else if colonPosition is not equal to 0 then
					display alert "\":\"は使用できません。別の名前を使用してください。" as critical
				else
					set flagErrorInput to false
				end if
			end tell
		end repeat
		
		-- 入力したファイル名の検証
		set stringLength to the length of newFileName
		set dotPosition to the offset of "." in newFileName
		-- ファイル名と拡張子を分割
		if (dotPosition ≤ 1) or (dotPosition ≥ stringLength) then
			-- 拡張子がない入力文字列だと判断した場合
			set fileName to newFileName
			set extension to ".txt"
		else
			-- 拡張子ありの文字列と判断した場合
			set fileName to characters 1 thru (dotPosition - 1) of newFileName as text
			set extension to characters dotPosition thru stringLength of newFileName as text
		end if
		
		-- 重複ファイル名があるかどうか確認
		set flagFileExists to true
		set indexFile to ""
		
		repeat while flagFileExists
			tell application "Finder"
				set flagFileExists to (exists file (fileName & indexFile & extension) in sourceFolder)
			end tell
			
			if not flagFileExists then
				-- なければファイルパスを確定して処理を抜ける
				set newFile to "" & sourceFolder & fileName & indexFile & extension
				exit repeat
			end if
			
			set indexFile to (indexFile + 1)
		end repeat
		
		-- ファイルを作成する
		set touchScript to "touch " & quoted form of (POSIX path of newFile)
		do shell script touchScript
		
		(* memo: ファイル作成後に開く場合はコメント解除してください 
		-- ファイルを開く
		set openScript to "open " & quoted form of (POSIX path of newFile)
		do shell script openScript
		*)
		
		-- 重複のためファイル名を変更した場合は通知
		if indexFile is not equal to "" then
			display alert "Renamed file name \"" & fileName & extension & "\" to \"" & fileName & indexFile & extension & "\" because it already existed" as informational
		end if
		
	end try
	return input
end run
既知の問題
  • 空白文字を含む拡張子を入力した場合,ファイルが生成されない。かつ通知も出てこない。

6. デバッグボタンを押してスクリプトを保存

赤枠のデバッグボタンをクリックしてスクリプトを確定し,エラーメッセージが出ないことを確認してください。正常なコードとしてデバックが通れば,メッセージは何も出てきません。
f:id:mogmo811:20200815103244j:plain

7. ファイル名を指定して保存する

コンテキストメニューに表示されるラベルにもなるので,わかりやすいファイル名にしましょう。
f:id:mogmo811:20200815094442j:plain

実行例

1. スクリプトの実行

Finderを開き,ファイルを作成したいフォルダを右クリックして「サービス」>「(作成したファイル名)」をクリックすると実行します。
※フォルダの右クリックメニューからしか実行できないみたいです。
f:id:mogmo811:20200815103711j:plain
f:id:mogmo811:20200815103842j:plain

2. ファイル名を入力

"."なしで入力すると自動で拡張子".txt"を付与し,テキストファイルを作成します。
f:id:mogmo811:20200815104000j:plain
f:id:mogmo811:20200815104336j:plain

"."の入力があれば,拡張子として認識します。
f:id:mogmo811:20200815104644j:plain
f:id:mogmo811:20200815104659j:plain

重複ファイル名がある場合は,インデックス番号を自動で付与してファイルを作成します。
f:id:mogmo811:20200815104907j:plain
f:id:mogmo811:20200815104942j:plain
なぜここだけ英語にしてしまった自分!!!笑

f:id:mogmo811:20200815105000j:plain

【コマンドスクリプト】宛先・件名・本文をテンプレート化したバッチファイルを作る【Bat】

もぐもです。(`・ω・´)🍙
前回は,GoogleメールのURLに宛先・件名・本文が設定できる方法について書きました。
mogmo811.hatenablog.com

簡単なものならこれ方法で十分です。
今回は,以下のような理由でバッチファイルを作ってみました。

  • 件名に月日を使いたい
  • 本文設定時,ユーザー(今んとこ,うちしかいないけど)に改行の文字列"%0D%0A"を入力させたくない

作ったもの

  • URLを自動生成し,Googleメールを自動で開くバッチファイル
  • 本文のテンプレートにつかうbodyTemplate.txtファイル

上記2ファイルを同じ場所に置けば実行が可能です。

バッチファイルの中身(全体)

@echo off

rem 定数 ===============
set BODY_TEMPLATE_FILE=bodyTemplate.txt
set CRLF=%%0D%%0A
set YEAR=%date:~,4%
set MONTH=%date:~5,2%
set DAY=%date:~-2%

rem ユーザー設定 ==========
set TO_ADDRESS=tanaka@***.jp
set CC_ADDRESS=aida@***.jp,iida@***.jp
set BCC_ADDRESS=mogmo@***.jp
set REPORTER=もぐも
set SUBJECT=【日報】%MONTH%/%DAY% %REPORTER%

setlocal enabledelayedexpansion
if exist %BODY_TEMPLATE_FILE% (
    for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %BODY_TEMPLATE_FILE%') do (
        rem memo: %%Xには行番号,%%Yは本文
        set LINE=%%Y%CRLF%
        set BODY=!BODY!!LINE!
    )
)

rem 設定内容表示 ==========
echo 設定内容 ----------------------------------------------
echo 報告日 : %YEAR%/%MONTH%/%DAY%
echo 報告者 : %REPORTER%
echo To     : %TO_ADDRESS%
echo Cc     : %CC_ADDRESS%
echo Bcc    : %BCC_ADDRESS%
echo 件名   : %SUBJECT%
echo 本文   : %BODY_TEMPLATE_FILE%を参照してください。
echo -------------------------------------------------------

rem 宛先,件名,本文をセットしたメール作成画面を表示 ==========
echo.
echo Googleメールの新規メール作成画面を既定のブラウザで開きます...
start "" ^"https://mail.google.com/mail/?view=cm^&fs=1^&to=%TO_ADDRESS%^&cc=%CC_ADDRESS%^&bcc=%BCC_ADDRESS%^&su=%SUBJECT%^&body=%BODY%^"

rem 終了 ==========
endlocal
pause

コード上部

@echo off
rem 定数 ===============
set BODY_TEMPLATE_FILE=bodyTemplate.txt
set CRLF=%%0D%%0A
set YEAR=%date:~,4%
set MONTH=%date:~5,2%
set DAY=%date:~-2%
  1. echo off で「以降実行中のコマンドを表示しない」設定にし,さらに@を付けることでこのコマンドすら非表示にする
  2. rem ~でコメントが書ける。コメントなので実行はしない。
  3. 本文BODY_TEMPLATE_FILE変数に "bodyTemplate.txt" を設定する。変数に文字列を代入するときは,set 変数=文字列と書く
  4. CRLF変数に改行に使う文字列を代入する
  5. YEARMONTHDAYには%date%で取得した年月日を必要な文字列だけ抽出して代入する

ユーザー設定部

rem ユーザー設定 ==========
set TO_ADDRESS=tanaka@***.jp
set CC_ADDRESS=aida@***.jp,iida@***.jp
set BCC_ADDRESS=mogmo@***.jp
set REPORTER=もぐも
set SUBJECT=【日報】%MONTH%/%DAY% %REPORTER%

setlocal enabledelayedexpansion
if exist %BODY_TEMPLATE_FILE% (
    for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %BODY_TEMPLATE_FILE%') do (
        rem memo: %%Xには行番号,%%Yは本文
        set LINE=%%Y%CRLF%
        set BODY=!BODY!!LINE!
    )
)
  1. TO_ADDRESSCC_ADDRESSBCC_ADDRESSにはそれぞれ送信したいアドレスを設定する。複数アドレスがある場合は ",(カンマ)" で区切る。
  2. REPORTERは件名で使いたかったので用意した。不要なら削除
  3. SUBJECTに件名を設定する。上記の例なら "【日報】 4/29 もぐも" のようになる
  4. bodyTemplate.txtに書いた本文をfor文で1行読みながらURL用の文字BODYを組み立てていく。
  5. 普通にファイルを1行ずつ読むと空白行が無視されてしまうので,その対策として'findstr /n "^" %BODY_TEMPLATE_FILE%'を記述。findstrを使用して行頭に行番号を付け,%%Xに行番号,%%Yに一文が代入されるようになっている。
  6. set LINE=%%Y%CRLF%で取得した一文%%Yのあとすぐに改行文字CRLFを付けた文字列をLINEに代入する
  7. set BODY=!BODY!!LINE!BODYに前の状態のBODYLINEを代入している
  8. setlocal enabledelayedexpansionset BODY=!BODY!!LINE!については遅延環境変数でググってください。

設定内容表示部

これはechoでコマンドプロンプトに情報を表示しているだけなので説明は割愛します。

rem 設定内容表示 ==========
echo 設定内容 ----------------------------------------------
echo 報告日 : %YEAR%/%MONTH%/%DAY%
echo 報告者 : %REPORTER%
echo To     : %TO_ADDRESS%
echo Cc     : %CC_ADDRESS%
echo Bcc    : %BCC_ADDRESS%
echo 件名   : %SUBJECT%
echo 本文   : %BODY_TEMPLATE_FILE%を参照してください。
echo -------------------------------------------------------

URLを作ってブラウザを起動する

rem 宛先,件名,本文をセットしたメール作成画面を表示 ==========
echo.
echo Googleメールの新規メール作成画面を既定のブラウザで開きます...
start "" ^"https://mail.google.com/mail/?view=cm^&fs=1^&to=%TO_ADDRESS%^&cc=%CC_ADDRESS%^&bcc=%BCC_ADDRESS%^&su=%SUBJECT%^&body=%BODY%^"

rem 終了 ==========
endlocal
pause
  1. echo.コマンドプロンプトに空行を表示
  2. Tips: start http://~:規定のブラウザでURLを開く
  3. Tips: start "ブラウザのファイルの場所" "http://~":ブラウザを指定してURLを開く
  4. 今回はURLを"で囲むため,start "" "https://~"と記述して,ブラウザを指定せずURLを開きますよ~っていうコードにしてます。
  5. "&Windowsちゃんが命令コードと勘違いしてしまうので,文字列として扱いたい場合は"^を前につけてあげてください。これをエスケープといいます。URLを囲む"エスケープしたのは,途中で変数を%TO_ADDRESS%のように使いたかったからです。普通に"のみだと,変数ではなく"%TO_ADDRESS%" という文字列として処理されてしまいます。
  6. setlocal したら endlocal
  7. pause:キー入力待機状態にする。確認のためキー入力状態にしていただけなので,なくても可能。

完成

あとはバッチファイルと本文テンプレート用のテキストファイルを同じ場所に保存しておくだけ。
バッチファイルを実行すれば規定ブラウザで新規メール作成画面が開くはずです。


ではまた。
もぐも(`・ω・´)🍙

【Googleメール】URLに宛先・件名・本文を設定して新規メール作成画面を開く

こんにちは。もぐもです(`・ω・´)🍙

テレワークが始まって,報告をメールで行うようになり,お決まりの相手にお決まりの内容を送ることが多くなってきたのですが,宛先・件名・本文をまとめてテンプレートに登録する機能がGoogleメールにはないだとぉぉ。。
なんとかできないか調べてみたところURLに宛先・件名・本文を設定することでテンプレートのような使い方ができることを知ったので,まとめてみます。

まずは既存機能について

件名と本文をテンプレートに登録する機能

Googleメールに件名と本文のテンプレート機能があるのはご存じでしょうか?
私は今日この時まで知らなかったです。

簡単に紹介しておきます。
まず,設定アイコン>"詳細">"テンプレート"の"有効にする"にチェックを付けて設定を保存します。
f:id:mogmo811:20200428215632p:plain

メールの新規作成や返信で件名と本文を編集し,右下のアイコンから
"テンプレート">"下書きをテンプレートとして保存">"新しいテンプレートとして保存"を選択します。
f:id:mogmo811:20200428215951j:plain

テンプレート名は件名に使われますので,件名のままにしておいてください。
これでテンプレートの登録は完了です。

あとは,メール作成画面で右下のアイコンをクリックして "テンプレート">"テンプレートの挿入" の中から適用したいテンプレートを選択すると件名と本文が反映されます。

Google連絡先のラベルを利用した機能

Google連絡先の"ラベル"という機能を使うと,宛先をグルーピングできます。
そしてこのラベル機能はGoogleメールでも利用することができます。
GoogleメールのTo,Cc,Bccいずれかの入力欄でラベル名を入力すると,ラベルがついている連絡先が一発で登録できます。

全てTo,Cc,Bccのいずれかに反映させたい場合は使えますが,この連絡先はTo,この連絡先はCc..みたいに細かい設定はできません。

宛先・件名・本文を指定したURLを作る

既存機能ではできない宛先・件名・本文のテンプレート化は,以下のようなURLを作ることで解決できるみたいです。

https://mail.google.com/mail/?view=cm&fs=1&to***@***.co.jp&body=本文やで

&to=&body=という文字がURL中にありますね。
これらをURLに追記することで,宛先や本文等に何を表示するかあらかじめ設定することができます。
ちなみにこの例ですと,宛先(To)に***@***.co.jp,本文に「本文やで」が入力された状態で新規メール作成画面が開きます。

それでは設定できる内容について,詳しく説明していきます。

URLの先頭

先頭文字列はPCかスマホかで違います。

PCの場合 https://mail.google.com/mail/?view=cm&fs=1
iPhone/Androidの場合 googlegmail:///co?

このURLに必要な項目を付け加えていくことで細かい設定が可能になります。

設定可能な項目

宛先

宛先はTo,Cc,Bccが設定可能です。
スペースなしのカンマで区切れば複数メールアドレスも設定できます。

項目 接頭辞
To &to= &to=a@***.co.jp,b@***.co.jp
Cc &cc= &cc=c@***.co.jp
Bcc &bcc= &bcc=d@***.co.jp,f@***.co.jp
件名
項目 接頭辞
件名 &su= or &subject= &su=【日報】 もぐも

スペースも使用できます。

本文
項目 接頭辞
本文 &body= &body=1行目%0D%0A%0D%0A3行目

改行は"%0D%0A"という文字を入力すると可能です。
上の表の例だと,本文は以下のようになります。

1行目

3行目

ただこれ,Windowsの改行コードCRLF(0x0d0a)のことなのでMacの場合は違うかも。

URLの完成形

全て合わせると以下のようなURLになります。

https://mail.google.com/mail/?view=cm&fs=1&toa@***.co.jp,b@***.co.jp&cc=c@***.co.jp&bcc=d@***.co.jp,f@***.co.jp&su=【日報】 もぐも&body=1行目%0D%0A%0D%0A3行目

リンクファイルで実行する

デスクトップなどリンクファイルを作りたい場所で右クリックして "新規作成">"ショートカット" を選択し,URLを入力して保存します。

準備はこれだけでOKです。
リンクファイルを実行すると,規定ブラウザでGoogleメールの新規メール作成画面を表示します。


今日はここまで。
次回はバッチファイルを作って件名に日時を入れたり,本文のテンプレートをテキストファイルから読み込んでみたりしたので,そのことについて書いていきます。

ではまた
もぐも(`・ω・´)🍙

【Ubuntu】WSLにUbuntu 18.04 LTSをインストールする

f:id:mogmo811:20200424085958j:plain
WSLとはWindows Subsystem for Linuxの略。
Windows上でLinuxを動かせる機能です。

もぐもです(`・ω・´)
Redmineを導入したくてUbuntuをインストールすることになったので,そのメモもかねて。

環境

Windows環境】
エディション: Windows 10 Pro
バージョン: 1803
OSビルド: 17134.885
Ubuntu
18.04.4 LTS

Ubuntuのインストール

WSLの有効化

まずはWSLを有効にします。
"Windows の機能の有効化または無効化"を検索して,画面を開きます。コントロールパネルから画面を開く場合は,コントロールパネル>プログラム>プログラムと機能>Windows の機能の有効化または無効化をクリックします。

リストの中から”Windows Subsystem for Linux”を探し,チェックを入れてOKボタンをクリックします。

処理が完了したら再起動を促されますので,再起動しましょう。

Ubuntuインストール

Windows左下の検索から"Microsoft Store"を検索しアプリを開きます。Microsoft Storeを開いたら"Ubuntu"を検索し,インストールします。

Ubuntu起動と初期設定

Ubuntuをインストールしたら,起動します。
最初は真っ黒の画面に”Installing. this may taka a few minutes”と表示されますので,数分待ちましょう。
f:id:mogmo811:20200424092942p:plain

インストールが終了すると,まずusernameの入力待ち状態になりますので,usernameを設定します。
usernameはデフォルトでは大文字が使えませんので小文字の英語と数字で設定してください。

usernameが正常に設定できたら次はpasswordの入力を求められますので,passwordの設定を行いましょう。

この設定はUbuntuのユーザ設定なので,Windowsのアカウントとは無関係です。

パッケージリストの更新

パッケージリストの更新を行い,リポジトリに新しく登録されたアップグレードが必要なパッケージをリストに登録します。

$ cd /etc/apt
$ sudo sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://jp.archive.ubuntu.com/ubuntu/%g" sources.list
#パスワード入力が求められるので入力
#ファイル変更待ち...
$ sudo apt update
#アップデート待ち...
$ sudo apt upgrade
#最新情報取得待ち...

※# ~~~ はコメントなので,実際には画面に表示されません。

日本語化設定

$ sudo apt install language-pack-ja
#パスワード入力が求められるので入力
#日本語パッケージのインストール待ち...

#日本語の設定をjp_JP.UTF-8にする
$sudo update-locale LANG=ja_JP.UTF-8

#一度ログアウトして言語設定を反映する
$ exit

再びUbuntuを起動し,dateコマンドを実行して日本語が表示されていれば設定が完了です。

$ date
2020424日 金曜日 09:56:18 DST

これで基本的なUbuntuの設定は完了です。

参考

以下のサイトを参考にしました。
WSL(Windows10)にLinuxのUbuntuインストール | アールエフェクト


ここまでは意外と簡単でした。
次はRedmine導入の作業の方法を投稿することになるのかな。
ではまた。
もぐも(`・ω・´)

OCXファイルの登録

OCXファイルとは

フルスペルはOLE Custom Control。以下引用。

 OCXとは、Windowsのプログラムファイルの形式の一つで、OLEコントロールActiveXコントロールなどの形で部品化されたコンピュータプログラムを格納するためのもの。単体で実行することはできず、他のソフトウェアに機能を追加するために利用される。
 何らかのひとまとまりの機能を実装したソフトウェア部品で、Windows上で動作する他のプログラムに連結され、呼び出されることにより実行される。
 Windowsのソフトウェア部品の標準的な形式としてはDLL(Dynamic Link Library、.dllファイル)があるが、OCXのプログラム形式はDLLとほぼ同じもので、特定の要件を満たしたものがOCXとして機能する。一般的には画面表示や利用者による操作の受け付けなど、ユーザインターフェース要素が存在するソフトウェア部品にOCX形式が用いられる。

OCX(.ocxファイル)とは - IT用語辞典 e-Words

OCXファイルの登録

32bitならSystem32フォルダの,64bitならSysWOW64フォルダのregsvr32.exeを使ってocxをレジストリに登録します。
※Windows10の場合です。
コマンドプロンプトを管理者権限で開き,以下のコマンドを打ち込みます。
成功すると,メッセージボックスに成功しました的なメッセージが表示されます。
管理者権限で実行していないとエラーコード0x8002801cが発生します。

#32bitの場合
cd C:\Windows\System32
regsvr32 "ocxのパス"

#64bitの場合
cd C:\Windows\SysWOW64
regsvr32 "ocxのパス"

ではまた。