なごみコネクト設計書

このドキュメントは、『なごみコネクト ver.1.14』仕様解説書です。
なごみコネクト バージョン1.14
ドキュメント バージョン2013.11.18
なごみコネクト 作者衣日和
アプリケーションサンプル ほたる v.1.02
ドキュメント バージョン(記載アプリ)2013.10.19
アプリ作者衣日和
アプリ製作元 / 連絡先
なごみコネクトの最新版は衣日和ホームページ『略して仮。』で案内しています。

なごみコネクト概要

なごみコネクトは独自のアプリ連携規約です。
同じパソコン上で動作している複数のソフトウェアが情報のやりとりを行うための共通のルールを定義しています。 複数のソフトウェアが情報を共有することで個々のソフトウェアの枠を超えたサービスを提供することを目的としています。
私のハンドルネームから一字とってなごみコネクトとしました。

このドキュメントはソフトウェア開発者に向けたものですので、ソフトウェアの使用者が理解する必要はありません。

ソフトウェア開発者は、なごみコネクトを実装することで外部ソフトウェアとの連携を図ることができます。 このドキュメントに加筆・編集して配布パッケージに添付することで外部連携の仕様を簡単に公開することもできます。

またHSP言語(ツール)で実装する場合は、専用のモジュールを用意していますのでご利用ください。

実装上のポイント

なごみコネクトは、WindowsAPI(Win32API)が提供するカーネルオブジェクトとウィンドウメッセージを使用したプロセス間メモリ共有のルールです。 なごみコネクトを実装するうえで以下の項目を十分に理解しておく必要があります。

Kernel32.dll系API

名前付きカーネルオブジェクト関連のAPIを提供します。 ここで紹介するパラメータの値は、なごみコネクトで使用する分に限定しています。 実装の際に互換性の有る関数に置き換えてもかまいません。
CreateMutex
HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName);
ミューテックスオブジェクトを製作します。
ミューテックスには所有状態と非所有状態があり、同時に所有状態になれるのは1プロセスのみです。
lpMutexAttributesセキュリティ0 (NULL)
bInitialOwner所有権要求0 (FALSE)
lpNameオブジェクト名任意文字列 (なごコネ既定の識別名称)
戻り値0 (失敗)
n (オブジェクトハンドル)
CreateFileMapping
HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName);
ファイルマッピングオブジェクトを製作します。
オブジェクト名に同一文字列を指定することでプロセス間でメモリ領域を共有します。
hFileファイルのハンドル-1 (INVALID_HANDLE_VALUE)
lpAttributesセキュリティ0 (NULL)
flProtect保護属性0x00000004 (PAGE_READWRITE)
dwMaximumSizeHighサイズ(上位)0
dwMaximumSizeLowサイズ(下位)n [byte](なごコネから取得)
lpNameオブジェクト名任意文字列 (なごコネ既定の識別名称)
戻り値0 (失敗)
n (オブジェクトハンドル)
CloseHandle
BOOL CloseHandle(HANDLE hObject);
オブジェクト(CreateMutex,CreateFileMappingで製作)を破棄します。
ミューテックスオブジェクトの所有権を持っている場合、あらかじめ ReleaseMutex をします。
ファイルマッピングオブジェクトをマッピングしている場合、あらかじめ UnmapViewOfFile をします。
hObjectオブジェクトのハンドルn
戻り値0 (失敗)
n (完了)
WaitForSingleObject
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds);
ミューテックスオブジェクトの所有権を取得します。
すでに所有者がいた場合はタイムアウト時間まで待ちます。
hHandleオブジェクトのハンドルn
dwMillisecondsタイムアウト時間0 [ms](時間待ちをしない)
0xFFFFFFFF (INFINITE)
戻り値 0x00000000 (WAIT_OBJECT_0) 所有権を取得した
0x00000080 (WAIT_ABANDONED) 先の所有者が所有権を放棄したため、所有権を取得した
0x00000102 (WAIT_TIMEOUT) タイムアウト時間が経過した(所有権を得られなかった)
0xFFFFFFFF (WAIT_FAILED) エラーが発生した
ReleaseMutex
BOOL ReleaseMutex(HANDLE hMutex);
ミューテックスオブジェクトの所有権を放棄します。
MapViewOfFile
LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap);
ファイルマッピングオブジェクトをマッピングします。
ファイルマッピングオブジェクトはマッピングすることでメモリ空間へのアクセスが可能になります。
hFileMappingObjectオブジェクトのハンドルn
dwDesiredAccessアクセスモード0x00000002 (FILE_MAP_WRITE)
dwFileOffsetHighオフセット(上位)0
dwFileOffsetLowオフセット(下位)0
dwNumberOfBytesToMap対象のバイト数0 (オブジェクト全域が対象)
戻り値0 (失敗)
n (開始アドレス)
UnmapViewOfFile
BOOL UnmapViewOfFile(LPCVOID lpBaseAddress);
ファイルマッピングオブジェクトのマッピングを解除します。
GetTickCount
DWORD GetTickCount(VOID);
Windows起動からの経過時間(ms)を取得します。
上記API関数の対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98  :Windows 95  以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用

文字コード

なごみコネクトで使用する文字コードはすべてアスキーコード - シフトJISコードです。 APIはANSI版(関数名の最後にAが付く方)を使用してください。
文字コード表
コード +0x0+0x1+0x2+0x3+0x4+0x5 +0x6+0x7+0x8+0x9+0xa+0xb +0xc+0xd+0xe+0xf
0x20  !"#$%&' ()*+,-./
0x30 012345678 9:;<=>?
0x40 @ABCDEFG HIJKLMNO
0x50 PQRSTUVW XYZ[\]^_
0x60 `abcdefg hijklmno
0x70 pqrstuvw xyz{|}~ 
特殊文字コード
終端コード(NULL)0x00
タブ(桁揃えインデント)0x09
改行0x0d , 0x0a (連続で)
日本語(2bytes文字)の1byte目0x81〜0x9F , 0xE0〜0xFC
【例】"NagomiConnect 和結"
Nagomi Connec t  
0x4E0x610x670x6F0x6D0x69 0x430x6F0x6E0x6E0x650x63 0x740x200x980x610x8C0x8B0x00

エンディアン

エンディアンはマルチバイトデータをメモリに格納するための法則です。
メモリ域 0x4E0x610x670x6F 0x6D0x690x000x00
ビッグエンディアン0x4E61676F0x6D690000
リトルエンディアン0x6F67614E0x0000696D
文字列Nagomi(NULL)(NULL)
なごみコネクトはリトルエンディアンを採用しています。 ただし、プラットホームがビッグエンディアンで動作している場合はそれに従ってください。 システム由来の動作ですので通常の代入/参照をする分にはエンディアンを意識する必要はありません。

4096byte?

ハードディスクやメモリに対してソフトウェアレベルでは1byte精度で操作できます。 しかしシステムは、この領域を効率的に管理するためにある程度まとめたブロックにしています。 そのブロックが1つ4096byte(標準値)なのです。

普段はシステムが自動で管理してくれるので開発者が特に何か措置をとる必要はありません。 ですがこのブロック数を拡張するような領域の再確保を行う場合には問題が生じてしまうのです。 メモリブロックは連続して確保する必要があるにも関わらず、必ずしも次のブロックが未使用であるとは限らないわけです。 このような場合、オーバーフローを起こしてデータを破壊するおそれがあります。

ですから領域サイズの変更が必要な場合、一度領域を開放してから改めて領域を確保し直す必要があります。 これが共有メモリとなると非常に複雑な作業になります(全てのアプリが開放する必要があります)。

なごみコネクトではシステムの設定値にかかわらず4096byteを一つの基準に設計し安全な再確保も考慮しています。

なごみコネクトの要素

なごみコネクトの用語とオブジェクトとデータ共有の解説です。

アイテム(Item)

アイテムはなごみコネクトに参加する単位で普通は 1アプリ = 1プロセス = 1アイテム です。 参加アイテムには一意のアイテム番号が割り当てられこの番号でアイテムを特定します。 また、なごみコネクトに参加する時にアイテム識別子を設定してください。

アイテム番号(ItemNumber)

アイテム番号は、他のアイテムとは被らない 1〜1000 のいずれかの値になります。 つまり現バージョンのなごみコネクトに同時に参加できるアイテムの最大数は 1000個 です。 未参加アイテムの場合は共通で 0 を使用します。

アイテム識別子(ItemName)

複数の参加アイテムの中から任意のアイテムを探す最初のキーワードで、アプリ開発者が決定する任意の4byte値(アプリ固有値)です。 この値は4byteまでの文字列相当であることが望ましいです。
【例】
文字列文字コード値(リトルエンディアン)
"IT""I"=0x49 , "T"=0x540x00005449
"TEST""T"=0x54 , "E"=0x45 , "S"=0x53 , "T"=0x540x54534554
"略仮""略"=0x97AA , "仮"=0x89BC0xBC89AA97
※2文字以下の場合、終端コードを含めても3byte程しか保証されない(1byte以上が不定値になる)ことに注意してください。

レター通信(LetterConnect)

なごみコネクトではアイテム間のデータ共有を SendMessage,PostMessage によるウィンドウメッセージ発行/割り込み処理によって実装します。
SendMessage , PostMessage (User32.dll)
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
BOOL    PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
hWnd送信先のウィンドウハンドルn (なごコネから取得)
Msg送信するメッセージコードn (なごコネから取得)
wParam送信側のアイテム番号とレタータイプ 0xFFFF0000 アイテム番号
0x0000FFFF レタータイプ
lParamパラメータn (任意)
戻り値 SendMessage時:受信側が返した値
PostMessage時:0(NG) or 0以外(OK)

レタータイプ(LetterType)

レタータイプはそのメッセージが送信された目的を示す定数です。 0〜15(0x0000〜0x000F) をなごみコネクトで定義しています。 また、16〜65535(0x0010〜0xFFFF) の範囲でアプリが自由に定義します。
#define NgmLe_Inquire1st    0x0000      //アプリ自由レスポ(対話型相手確認など)
#define NgmLe_InquireLast   0x0005      //  ↑全6種
#define NgmLe_Greeting      0x0006      //ごあいさつ
#define NgmLe_UpdateFD      0x0007      //エクステ更新報告(コマンドライン送信など)
#define NgmLe_PleaseFD      0x0008      //エクステ更新要求(データ要求)
#define NgmLe_MyPost        0x000F      //自身への送信目的で用いる
#define NgmLe_User1st       0x0010      //ユーザー自由定義
#define NgmLe_UserLast      0xFFFF

コネクト(Connect)

なごみコネクト全体の情報と参加アイテムの一覧を管理する、サイズ4016byte固定 のマッピングオブジェクトです。
FileMapping - コネクト
Indexフィールド(サイズ4bytes)
0コネクトシグネチャ0x8B8C6198 = "和結" (固定)
1 更新時間
⇒このコネクトを更新した時のWindows起動からの経過時間
n [ms](GetTickCountの戻り値)
2マップ番号(予約)0 (固定)
3 最大アイテム数
⇒同時に参加していたアイテムの最大数
※このフィールドはカウントアップのみ
n [個]
4〜1003 アイテム識別子
⇒参加アイテムの識別子一覧
0xnnnnnnnn = "????" (アイテム識別子)
0x00000000 = ""     (空き)
【例】なごみコネクト運用時のコネクト
Index備考
00x8B8C6198 = "和結"
13600000Windows起動から1時間
20
36
40x4C504D53 = "SMPL"アイテム番号 1 のアイテム
50x54534554 = "TEST"
6 0 = "" 参加したアイテムが離脱した跡(次に参加するアイテムはここに入ることが望ましい)
7 0x45474F48 = "HOGE"アプリの多重起動や偶然同じ識別子を使用したなど
80x45474F48 = "HOGE"
90 = ""最大アイテム数はここを示してる(つまり離脱跡)
0 = ""
10030 = ""アイテム番号 1000 のアイテム

アペンド(Append)

各参加アイテムが必要な情報を公開するための領域で、サイズ680byte固定 のマッピングオブジェクトです。
FileMapping - アペンド
Indexフィールド(サイズ4bytes)
0 アペンドシグネチャ 0xnnnnnnnn = "????" (アイテム識別子)
1 更新時間
⇒このアペンドを更新した時のWindows起動からの経過時間
n [ms](GetTickCountの戻り値)
2 レター受信用ウィンドウのハンドル 0 (レター受信をしない)
n (ウィンドウハンドル)
3 レター受信用ウィンドウメッセージの番号 0 (レター受信をしない)
n (メッセージコード)
4 エクステサイズ 0 (現在エクステは無い)
n [byte](現在のエクステのサイズ)
5 エクステタイプ
⇒現在のエクステに格納しているデータの種類
※エクステ自体が一時的なものなのでこのフィールドの利用は任意
0 (特に無ければ)
n (アイテム定義の定数)
6〜37
(128bytes)
アプリ名
⇒アプリ名を示すNULLで終わる文字列(改行禁止)
""  (未定でも良い)
"?" (任意文字列)
38〜41
(16bytes)
バージョン
⇒アプリバージョンを示すNULLで終わる文字列(改行禁止)
※複数参加や多重起動する場合に個々を識別するために使用しても良い
""  (未定でも良い)
"?" (任意文字列)
42〜105
(512bytes)
ショートメッセージ
⇒アプリからのメッセージをNULLで終わる文字列(改行OK)で指定
""  (未定でも良い)
"?" (任意文字列)
【参考】ウィンドウメッセージ(メッセージコード)範囲表
    0〜 1023 (0x0000〜0x03FF) Windowsが指定/予約しています。 この範囲の指定は避けるべきです。
 1024〜32767 (0x0400〜0x7FFF) WM_USER〜 既存のコントロールでも利用する範囲です。 これらのコントロールに誤って送信した場合誤動作を起こす可能性があります。
32768〜49151 (0x8000〜0xBFFF) WM_APP〜 この範囲なら既存のコントロールの定義と衝突することもないでしょう。
49152〜65535 (0xC000〜0xFFFF) 文字列メッセージの範囲です。 この範囲を使用するには所定の手続き(RegisterWindowMessageなど)を取ってください。
65536〜      (0x10000〜) 予約されています。 なごみコネクトで使用できる範囲を超えています。

エクステ(Extend)

マッピングオブジェクトで確保するメモリ領域で、主にレター通信時に必要になる不定サイズのデータを一時的に格納するために使用します。 サイズ 0byte のマッピングオブジェクトは製作できないことに留意してください。 このオブジェクトの製作/破棄の際に、サイズをアペンドのエクステサイズフィールドに格納してください。

ミューテ(Mutex)

ミューテックスオブジェクトです。 このオブジェクトの所有権(オブジェクト自体の有無ではなく)をもってそのアイテムが存在するかを判断します。 またこの所有権はコネクト・アペンド・エクステを編集する権利も示します。

オブジェクト命名規則

各名前付きカーネルオブジェクト(マッピング・ミューテックス)を共有するために付ける名前は表の通りです。 なお、アペンド・エクステ・ミューテ末尾の X は文字列としてアイテム番号(桁指定無し)で置き換えてください。
カーネルオブジェクト命名規則
名前(文字列)例:アイテム番号 7 の場合例:アイテム番号 15 の場合
コネクトNagomiConnect
ミューテ NagomiConnectMutex_XNagomiConnectMutex_7NagomiConnectMutex_15
アペンド NagomiConnectAppend_XNagomiConnectAppend_7NagomiConnectAppend_15
エクステ NagomiConnectExtend_XNagomiConnectExtend_7NagomiConnectExtend_15
また、未参加アプリがレター送信を行う際に一時的に NagomiConnectMutex_0,NagomiConnectAppend_0,NagomiConnectExtend_0 を製作することがあります。

編集権

マッピングオブジェクトはその性質上、基本的に誰でも編集できます。 しかしそれは、同期やデータ保全といった面で煩雑な手続きや監視を必要とします。 なごみコネクトではこういった処理を簡略化するために編集者をルールで定めています。

編集権はミューテの所有権によって決定します。 アプリは所有するミューテと同じアイテム番号のアペンド(全フィールド)・エクステ・コネクト(更新時間/最大アイテム数/当該アイテム識別子)を編集することが可能です。 例えばミューテ(NagomiConnectMutex_1)の所有権を持っているアイテムだけがアペンド(NagomiConnectAppend_1)とエクステ(NagomiConnectExtend_1)を編集できるということです。

また、未参加アプリが一時的にエクステを必要とする場合、始めにミューテ(NagomiConnectMutex_0)の所有権を取得します。 続けてアペンド(NagomiConnectAppend_0、サイズ記入に必要)・エクステ(NagomiConnectExtend_0)を製作します。
この3つのオブジェクトは全未参加アプリで共用ですので不要になった時点で直ちに破棄して次のアプリが使用できるようにしてください。

なごみコネクトの維持

マッピングオブジェクトとミューテックスオブジェクトには参照数が 0 になるとWindowsによって自動的に破棄(メモリ開放)されるという特性があります。 この参照数は CreateMutex,CreateFileMapping で製作する毎に +1 され CloseHandle で破棄する毎に -1 されます。 また、CloseHandle をしなくとも製作したプロセスが終了した時点で自動的に CloseHandle されたとみなされます。 これにより不慮の強制終了で正規の終了操作がとれなくても安全に終了させることができます(ただしメモリリークの可能性もあるため可能な限り終了操作は怠らないでください)。

参加アイテムは、参加中にこの参照数を 0 にしないよう配慮してください。 参照目的のアイテムは、必要な参照が完了したら開放するよう心掛けてください。

なごみコネクト実装

おおよその実装手順です。 実際の手順はアプリ開発者しだいですが以下の点に留意ください。

なごみコネクトを参照する

なごみコネクトへの参加有無にかかわらずすべてのアプリは各マッピングオブジェクト・ミューテックスを自由に参照することができます。

なごみコネクトに参加する

  1. コネクト(NagomiConnect)を製作
  2. コネクトシグネチャを確認
  3. ミューテの所有権を取得
  4. コネクト各フィールドを更新
  5. アペンド(NagomiConnectAppend_X)を製作
  6. アペンド各フィールドを更新

なごみコネクトから離脱する

  1. コネクト(NagomiConnect)各フィールドを更新
  2. コネクト(NagomiConnect)を破棄
  3. エクステ(NagomiConnectExtend_X)を破棄 (エクステが有る場合)
  4. アペンド(NagomiConnectAppend_X)を破棄
  5. ミューテ(NagomiConnectMutex_X)を破棄

レター通信をする

レター通信では送信側と受信側に共通の認識が必要です。 定義や仕様は受信側アイテムが決定し公開してください。
ここでは送信側のアイテム番号を S 、受信側のアイテム番号を R とします。 未参加アプリのアイテム番号は 0 を使用します。

レタータイプ:NgmLe_Inquire1st 〜 NgmLe_InquireLast

合言葉のようにして通信相手が想定した相手であるかを確認するために用います。 レター通信では双方に共通認識が必要であり相手の取り違いは誤作動の原因になります。
NgmLe_Inquire1st 〜 NgmLe_InquireLast
送信側アイテム受信側アイテム
アペンド(NagomiConnectAppend_R)を参照し送信先を取得
ウィンドウメッセージを発行(SendMessage)
  • パラメータ:任意(受信側規定値)
メッセージ割り込み発生
レタータイプ,パラメータから戻り値を算出
復帰戻り値を設定して処理完了
戻り値を確認

レタータイプ:NgmLe_Greeting

簡単なあいさつを送信します。 このレターは受信しても特に処理の必要がない些細なことをとりあえず伝えたい時に送信するものです。
NgmLe_Greeting
送信側アイテム受信側アイテム
アペンド(NagomiConnectAppend_R)を参照し送信先を取得
ウィンドウメッセージを発行(PostMessage)
  • パラメータ:定数
    • 0:意味を持たない
    • 1:アプリ起動した 2:アプリ終了する
    • 3:なごコネに参加する 4:参加した 5:離脱する 6:離脱した
    • 7:エクステ(NagomiConnectExtend_R)の取得が完了した
    • 8:レター受信先が変更になった(ウィンドウとメッセージ番号)
    • 9:アプリ名・バージョン・ショートメッセージを更新した
復帰
メッセージ割り込み発生
必要なら処理する
戻り値を設定して処理完了
PostMessageの代わりにSendMessageを使用しても良い。そのため受信側は一応戻り値を設定することが望ましい。

レタータイプ:NgmLe_UpdateFD

不定長データを送信します。
NgmLe_UpdateFD
送信側アプリ(未参加の場合)送信側アイテム受信側アイテム
ミューテ(NagomiConnectMutex_0)の所有権を取得
※以降アイテム番号は 0 を使用する
※所有権が取得できない場合は CloseHandle して処理を終了する
エクステ(NagomiConnectExtend_S)が存在する場合は破棄
※マッピングオブジェクトのメモリサイズ変更は不具合になる
エクステ(NagomiConnectExtend_S)を製作しデータを書き込む
アペンド(NagomiConnectAppend_0)を製作し値を書き込む
  • シグネチャ:0x8B8C6198 = "和結"
  • 更新時間
  • エクステサイズ
  • エクステタイプ
アペンド(NagomiConnectAppend_S)を編集
  • 更新時間
  • エクステサイズ
  • エクステタイプ
アペンド(NagomiConnectAppend_R)参照し送信先を取得
ウィンドウメッセージを発行(SendMessage)
  • パラメータ:任意(受信側規定値)
メッセージ割り込み発生
アペンド(NagomiConnectAppend_S)を参照しエクステサイズを取得
エクステ(NagomiConnectExtend_S)を参照しデータを取得
復帰戻り値を設定して処理完了
エクステ(NagomiConnectExtend_S)を破棄
アペンド(NagomiConnectAppend_0)を破棄 アペンド(NagomiConnectAppend_S)を編集
  • 更新時間
  • エクステサイズ
  • エクステタイプ
ミューテ(NagomiConnectMutex_0)を破棄

レタータイプ:NgmLe_PleaseFD

不定長データを要求します。
NgmLe_PleaseFD
送信側アイテム受信側アイテム
アペンド(NagomiConnectAppend_R)参照し送信先を取得
ウィンドウメッセージを発行(SendMessage)
  • パラメータ:任意(受信側規定値)
メッセージ割り込み発生
エクステ(NagomiConnectExtend_R)が存在する場合は破棄
エクステ(NagomiConnectExtend_R)を製作しデータを書き込む
アペンド(NagomiConnectAppend_R)を編集
  • 更新時間
  • エクステサイズ
  • エクステタイプ
復帰戻り値を設定して処理完了
アペンド(NagomiConnectAppend_R)を参照しエクステサイズを取得
エクステ(NagomiConnectExtend_R)を参照しデータを取得
以下の操作は任意
レター送信(NgmLe_Greeting)でエクステ取得完了を通知
復帰
メッセージ割り込み発生
エクステ(NagomiConnectExtend_R)を破棄
アペンド(NagomiConnectAppend_R)を編集
  • 更新時間
  • エクステサイズ
  • エクステタイプ
戻り値を設定して処理完了

アプリ設計

このドキュメントを付属してるアプリケーションのなごみコネクト設計です。

サンプル ほたる

アイテム識別子0x53525448 = "HTRB" (変動有)
レター受信有り
受信用メッセージコード0x0400 (変動有)
追加定義
#define NgmLe_Hotaru_Bmscr 16
#define NgmLe_Hotaru_Talk  17
#define NgmLe_Hotaru_Debug 18
レター通信応答表
レタータイプパラメータ返値
NgmLe_Inquire1stn (自由)0x48 = "H"
NgmLe_Inquire1st + 1n (自由)0x4F = "O"
NgmLe_Inquire1st + 2n (自由)0x54 = "T"
NgmLe_Inquire1st + 3n (自由)0x41 = "A"
NgmLe_Inquire1st + 4n (自由)0x52 = "R"
NgmLe_InquireLastn (自由)0x55 = "U"
NgmLe_Greetingn (規定)1
NgmLe_UpdateFD1 (テキストデータ)
2 (バイナリデータ)
1
NgmLe_PleaseFD1 (テキストデータ)
2 (バイナリデータ)
1
NgmLe_Hotaru_Bmscrn (Index)n (該当値)
NgmLe_Hotaru_Talkn (自由)1
NgmLe_Hotaru_Debug専用モジュールを用いた特殊機能用

著作権・免責事項

なごみコネクトの著作権は考案者である衣日和が有します。 組み込んだソフトウェアの著作権はソフトウェアの開発者側にあります。 下記の禁止事項を除き自由に利用することができます。 利用に際し一切の報告・許諾は不要です。 なごみコネクトを使用している旨を掲示する必要もありません(仕様公開しない使い方は限定的かと思いますが…)。 もちろんなごみコネクトや私のHP等を宣伝する行為は歓迎します。

なごみコネクトを使用して生じたトラブル・損害等について衣日和は一切の責任を負いませんのでご了承ください。
Copyright (C) 2013 衣日和 All rights reserved.