Savoy ActiveX コントロール ユーザーガイド Jazz Soft, Inc.
改 訂 履 歴 1 改 訂 履 歴 バージョン 日 付 氏 名 説 明 1.00 2009 年 7 月 31 日 Hikaru Okada 新 規 に 作 成 1.00a 2009 年 8 月 22 日 Hikaru Okada マニュアルのページ 数 が 大 きくなったため 分 割 1.00c 2009 年 12 月 25 日 Hikaru Okada Windows Vista および Windows 7 における 注 意 点 を 追 加 1.00d 2010 年 12 月 18 日 Hikaru Okada インストール 時 の 製 品 選 択 画 面 を 追 加 Windows 64 ビット 版 対 応 1.00e 2014 年 7 月 13 日 Carl Hikaru Okada Windows 8.1 の 記 述 を 追 加 - 2 -
目 次 2 目 次 1 改 訂 履 歴... 2 2 目 次... 3 3 使 用 環 境... 4 4 セットアップ... 5 4.1 HASP ドライバのインストール... 9 4.2 アンインストール... 14 5 チュートリアル... 16 5.1... 16 5.1.1 ミニホストの 仕 様... 16 5.1.2 プロジェクトの 作 成... 16 5.1.3 ツールボックスへ Savoy を 追 加... 18 5.1.4 フォームに Savoy を 配 置... 19 5.1.5 イベントの 処 理... 21 5.1.6 全 ソースコード... 22 5.1.7 Windows 64 ビット 版 における 注 意 点... 24 5.2 C# 2008... 26 5.2.1 プロジェクトの 作 成... 26 5.2.2 フォームに Savoy を 配 置... 27 5.2.3 イベントの 処 理... 28 5.2.4 全 ソースコード... 29 5.2.5 Windows 64 ビット 版 における 注 意 点... 32 5.3 Visual C++ 2008... 33 5.3.1 プロジェクトの 作 成... 33 5.3.2 フォームに Savoy を 配 置... 35 5.3.3 ラッパークラスの 置 き 換 え... 38 5.3.4 ボタンの 処 理... 38 5.3.5 イベントの 処 理... 39 5.3.6 全 ソースコード... 40-3 -
使 用 環 境 3 使 用 環 境 Windows 2000, Windows XP, Windows Vista または Windows 7 Visual Basic や Visual C++などの Active X 対 応 の 開 発 言 語 - 4 -
セットアップ 4 セットアップ Windows には Administrator の 権 限 でログインしてください もし Windows Vista Windows 7 Windows 8 もしくは Windows 8.1 をお 使 いでユーザアカウントコントロール(UAC)が 有 効 になっている 場 合 インストールに 失 敗 することがあります 一 時 的 に UAC を 無 効 にしてください 開 発 環 境 も 実 行 環 境 も 同 じです Setup.exe を 実 行 してインストールします 1 旧 バージョンの Jazz Soft Semiconductor Solution がインストールされている 場 合 は 先 にアンインストールしてください アンインストールはコントロールパネルの Programs and Features から 行 えます 2 Setup.exe を 実 行 します Microsoft Visual C++ 2008 SP1 用 コンポーネント 群 がインストールされていない 場 合 は 最 初 にそれらがインストールされます 同 様 に.NET Framework 3.5 がインストールされていない 場 合 も それらをインストール するよう 表 示 される 場 合 があります 3 Jazz Soft Semiconductor Solution のセットアップ 画 面 が 表 示 されます Next ボタンをクリックします - 5 -
セットアップ 4 インストールするフォルダとユーザアカウントを 選 択 します 通 常 は 何 も 変 更 しないで Next ボタンをクリックします 5 インストールする 製 品 を 選 択 します Next ボタンをクリックします - 6 -
セットアップ 6 インストール 前 の 確 認 画 面 です Next ボタンをクリックします 7 インストールが 始 まります - 7 -
セットアップ 8 インストールが 正 常 に 完 了 すると 下 記 の 画 面 になります Close ボタンをクリックします - 8 -
セットアップ 4.1 HASP ドライバのインストール HASP キー 用 のドライバは 試 用 版 では 必 要 ありませんが 製 品 版 として 使 用 する 場 合 には 必 要 となります HASP ドライバのセッ トアップに 必 要 なソフトウェアは Jazz Soft Semiconductor Solution のセットアップでコピーされます HASP ドライバをインストールする 際 には HASP キーをコンピュータに 挿 さないでください 9 スタートメニューの Jazz Soft HASP から HASP SRM Runtime をクリックします - 9 -
セットアップ 10 ウェルカム 画 面 が 表 示 されます Next ボタンをクリックします 11 インストール 前 の 確 認 が 面 が 表 示 されます Install ボタンをクリックします - 10 -
セットアップ 12 インストールが 始 まります 13 Install drivers の 表 示 のままで 数 分 かかることがあります - 11 -
セットアップ 14 ドライバのコピーが 正 常 に 完 了 すると 下 記 の 画 面 になります Finish ボタンをクリックします - 12 -
セットアップ 15 ここで HASP キーをコンピュータに 挿 します Windows Vista の 場 合 は 画 面 右 下 にドライバのインストール 状 況 が 表 示 され ます 16 インストールが 正 常 に 完 了 すると 下 記 の 画 面 になります Close ボタンをクリックします - 13 -
セットアップ 4.2 アンインストール アンインストールはコントロールパネルの Programs and Features から 行 えます また Setup.exe を 実 行 しても 行 えます 1 インストールしたときの Setup.exe を 実 行 します 修 復 インストールするか アンインストールするか 聞 いてきますので Remove Jazz Soft Semiconductor Solution を 選 択 し Finish ボタンをクリックします 2 アンインストールが 始 まると 進 捗 状 況 が 表 示 されます - 14 -
セットアップ 3 アンインストールが 完 了 しました Close ボタンをクリックします - 15 -
5 チュートリアル 5.1 ここでは HSMS のミニホストを 作 成 しながらプログラミングについて 解 説 していくことにします 5.1.1 ミニホストの 仕 様 作 成 するミニホストの 仕 様 は 以 下 のようなものとし 通 信 相 手 は 一 般 的 なウェハ 検 査 装 置 とします 装 置 に 対 してオンライン 移 行 レシピ 指 定 測 定 開 始 データ 受 信 を 行 うことができます 送 信 できるメッセージは 以 下 のもののみとします Select.req Select.rsp S1F13 S2F41 S6F12 受 信 できるメッセージは 以 下 のもののみとします Select.req Select.rsp S1F14 S2F42 S6F11 装 置 の 初 期 設 定 はすでに 設 定 されているものとします ストリーム 9 やファンクション 0 の 処 理 は 行 わないこととします T3 タイムアウトの 監 視 は 行 わないこととします 5.1.2 プロジェクトの 作 成 1 Visual Studio 2008 を 起 動 し File メニューから New Project をクリックします 2 Visual Basic の Windows Forms Application を 選 択 し プロジェクト 名 とフォルダを 指 定 します ここではプロジェクト 名 を SavoyTutorialVB2008 とします 入 力 が 完 了 したら OK ボタンをクリックします - 16 -
3 新 規 のプロジェクトが 作 成 されました - 17 -
5.1.3 ツールボックスへ Savoy を 追 加 この 作 業 は 1 回 だけ 行 えば 次 回 からは 不 要 です 1 Toolbox の 余 白 部 分 を 右 クリックし メニューから Choose Items を 選 んでクリックします 次 の 画 面 が 表 示 されるまでに 1 分 以 上 かかる 場 合 があります 2 COM Components タブを 選 択 し 一 覧 から Savoy ActiveX Control module にチェックマークをつけます そして OK ボ タンをクリックします - 18 -
3 Savoy がツールボックスに 追 加 されますので 将 来 探 しやすくなるよう Tab を 追 加 して 整 理 しておきます 5.1.4 フォームに Savoy を 配 置 4 下 記 のように SavoyHsms SavoySecsII をフォームに 配 置 します - 19 -
5 Open ボタンをクリックしたら SavoyHsms の 通 信 設 定 画 面 が 表 示 されるようにします その 後 OK ボタンが 押 されたら 接 続 するようにします 設 定 内 容 は Savoy.ini ファイルに 保 存 され 次 回 から 設 定 の 入 力 は 不 要 です Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Setup hsms.loadinifile() If hsms.setup("") Then ' If OK button was pressed, establish connection hsms.connect = True End If End Sub 6 Online ボタンをクリックしたら S1F13 を 送 信 するようにします Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Send S1F13 outmsg.sml = "s1f13w" hsms.send(outmsg.msg) End Sub 7 PP Select ボタンをクリックしたら リモートコマンドで PP-SELECT を 送 信 するようにします - 20 -
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ' Send S2F41 PP-Select outmsg.sml = "s2f41w<a'pp-select'><a'ppid'><a'" + TextBox1.Text + "'>" hsms.send(outmsg.msg) End Sub 8 PP Start ボタンをクリックしたら リモートコマンドで START を 送 信 するようにします Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click ' Send S2F41 Start outmsg.sml = "s2f41w<a'start'>" hsms.send(outmsg.msg) End Sub 5.1.5 イベントの 処 理 SavoyHsms からのイベントを 処 理 します 1 Connected イベントが 来 たら セレクト 要 求 を 送 信 するようにします Private Sub hsms_connected(byval sender As System.Object, ByVal e As AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent) Handles hsms.connected ' Connected ' Send select request outmsg.sml = "Select.req" hsms.send(outmsg.msg) End Sub 2 Received イベントが 来 たら メッセージ 内 容 を 解 析 するために SavoySecsII に 渡 します Private Sub hsms_received(byval sender As System.Object, ByVal e As AxSAVOYLib._DSavoyHsmsEvents_ReceivedEvent) Handles hsms.received inmsg.msg = e.lpszmsg 3 返 信 の 必 要 なデータメッセージを 受 け 取 ったら 適 当 な 返 事 を 返 信 します Select Case inmsg.stype Case 0 ' Data message If inmsg.wbit And (inmsg.function Mod 2) <> 0 Then ' Need to reply something... outmsg.sml = "<b 0>" outmsg.reply(e.lpszmsg) - 21 -
hsms.send(outmsg.msg) End If 4 セレクト 要 求 を 受 け 取 ったら セレクト 応 答 を 返 信 します Case 1 ' Select request outmsg.sml = "Select.rsp" outmsg.reply(e.lpszmsg) hsms.send(outmsg.msg) 5.1.6 全 ソースコード 以 上 でミニホストの 完 成 です このプロジェクトはゼロからスクラッチで 作 った 訳 ですが 空 白 行 やコメントを 入 れてもたったの 55 行 し かありません 実 際 に 自 分 で 書 いたコードの 行 数 は コメントを 除 くとなんと 25 行 です 他 社 製 品 にあるような 訳 の 分 からない 設 定 ファイルもデータファイルも 書 きませんでした このような 驚 異 的 なまでの 簡 単 さは 他 社 では 真 似 のできない 芸 当 です Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Setup hsms.loadinifile() If hsms.setup("") Then ' If OK button was pressed, establish connection hsms.connect = True End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' Send S1F13 outmsg.sml = "s1f13w" hsms.send(outmsg.msg) End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ' Send S2F41 PP-Select outmsg.sml = "s2f41w<a'pp-select'><a'ppid'><a'" + TextBox1.Text + "'>" hsms.send(outmsg.msg) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click ' Send S2F41 Start outmsg.sml = "s2f41w<a'start'>" hsms.send(outmsg.msg) End Sub Private Sub hsms_connected(byval sender As System.Object, ByVal e As AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent) Handles hsms.connected ' Connected ' Send select request outmsg.sml = "Select.req" hsms.send(outmsg.msg) End Sub - 22 -
Private Sub hsms_received(byval sender As System.Object, ByVal e As AxSAVOYLib._DSavoyHsmsEvents_ReceivedEvent) Handles hsms.received inmsg.msg = e.lpszmsg Select Case inmsg.stype Case 0 ' Data message If inmsg.wbit And (inmsg.function Mod 2) <> 0 Then ' Need to reply something... outmsg.sml = "<b 0>" outmsg.reply(e.lpszmsg) hsms.send(outmsg.msg) End If Case 1 ' Select request outmsg.sml = "Select.rsp" outmsg.reply(e.lpszmsg) hsms.send(outmsg.msg) End Select End Sub End Class - 23 -
5.1.7 Windows 64 ビット 版 における 注 意 点 Windows の 64 ビット 版 で 動 作 させるにはアプリケーションを x86 モードにする 必 要 があります 以 下 のようにプロジェクト 設 定 を 変 更 してください 1 ツールバーから Configuration Manager をクリックします 2 Platform から<New...>をクリックします 3 New platform から x86 を 選 択 し OK ボタンをクリックます - 24 -
4 Platform が x86 に 変 更 されていることを 確 認 します 5 上 記 は Debug 版 ですが Release 版 も 同 様 に 変 更 します - 25 -
5.2 C# 2008 先 ほどの で 作 成 したアプリケーションを 今 度 は C# 2008 で 書 いてみましょう 5.2.1 プロジェクトの 作 成 1 Visual Studio 2008 を 起 動 し File メニューから New Project をクリックします 2 Visual C#の Windows Forms Application を 選 択 し プロジェクト 名 とフォルダを 指 定 します ここではプロジェクト 名 を SavoyTutorialCS2008 とします 入 力 が 完 了 したら OK ボタンをクリックします 3 新 規 のプロジェクトが 作 成 されました - 26 -
5.2.2 フォームに Savoy を 配 置 1 下 記 のように SavoyHsms SavoySecsII をフォームに 配 置 します - 27 -
2 Open ボタンをクリックしたら SavoyHsms の 通 信 設 定 画 面 が 表 示 されるようにします その 後 OK ボタンが 押 されたら 接 続 するようにします 設 定 内 容 は Savoy.ini ファイルに 保 存 され 次 回 から 設 定 の 入 力 は 不 要 です private void button1_click(object sender, EventArgs e) // Setup hsms.loadinifile(); if (hsms.setup("")) // If OK button was pressed, establish connection hsms.connect = true; 3 Online ボタンをクリックしたら S1F13 を 送 信 するようにします private void button2_click(object sender, EventArgs e) // Send S1F13 outmsg.sml = "s1f13w"; hsms.send(outmsg.msg); 4 PP Select ボタンをクリックしたら リモートコマンドで PP-SELECT を 送 信 するようにします private void button3_click(object sender, EventArgs e) // Send S2F41 PP-Select outmsg.sml = "s2f41w<a'pp-select'><a'ppid'><a'" + textbox1.text + "'>"; hsms.send(outmsg.msg); 5 PP Start ボタンをクリックしたら リモートコマンドで START を 送 信 するようにします private void button4_click(object sender, EventArgs e) // Send S2F41 Start outmsg.sml = "s2f41w<a'start'>"; hsms.send(outmsg.msg); 5.2.3 イベントの 処 理 SavoyHsms からのイベントを 処 理 します - 28 -
1 Connected イベントが 来 たら セレクト 要 求 を 送 信 するようにします private void hsms_connected(object sender, AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent e) // Connected // Send select request outmsg.sml = "Select.req"; hsms.send(outmsg.msg); 2 Received イベントが 来 たら メッセージ 内 容 を 解 析 するために SavoySecsII に 渡 します private void hsms_received(object sender, AxSAVOYLib._DSavoyHsmsEvents_ReceivedEvent e) inmsg.msg = e.lpszmsg; 3 返 信 の 必 要 なデータメッセージを 受 け 取 ったら 適 当 な 返 事 を 返 信 します switch(inmsg.stype) case 0: // Data message if(inmsg.wbit && (inmsg.function % 2)!=0) // Need to reply something... outmsg.sml = "<b 0>"; outmsg.reply(e.lpszmsg); hsms.send(outmsg.msg); break; 4 セレクト 要 求 を 受 け 取 ったら セレクト 応 答 を 返 信 します case 1: // Select request outmsg.sml = "Select.rsp"; outmsg.reply(e.lpszmsg); hsms.send(outmsg.msg); break; 5.2.4 全 ソースコード 以 上 でミニホストの 完 成 です このプロジェクトはゼロからスクラッチで 作 った 訳 ですが 空 白 行 やコメントを 入 れてもたったの 83 行 し かありません 実 際 に 自 分 で 書 いたコードの 行 数 は コメントを 除 くとなんと 30 行 です 他 社 製 品 にあるような 訳 の 分 からない 設 定 ファイルもデータファイルも 書 きませんでした このような 驚 異 的 なまでの 簡 単 さは 他 社 では 真 似 のできない 芸 当 です - 29 -
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SavoyTutorialCS2008 public partial class Form1 : Form public Form1() InitializeComponent(); private void button1_click(object sender, EventArgs e) // Setup hsms.loadinifile(); if (hsms.setup("")) // If OK button was pressed, establish connection hsms.connect = true; private void button2_click(object sender, EventArgs e) // Send S1F13 outmsg.sml = "s1f13w"; hsms.send(outmsg.msg); private void button3_click(object sender, EventArgs e) // Send S2F41 PP-Select outmsg.sml = "s2f41w<a'pp-select'><a'ppid'><a'" + textbox1.text + "'>"; hsms.send(outmsg.msg); private void button4_click(object sender, EventArgs e) // Send S2F41 Start outmsg.sml = "s2f41w<a'start'>"; hsms.send(outmsg.msg); private void hsms_connected(object sender, AxSAVOYLib._DSavoyHsmsEvents_ConnectedEvent e) // Connected // Send select request outmsg.sml = "Select.req"; hsms.send(outmsg.msg); private void hsms_received(object sender, AxSAVOYLib._DSavoyHsmsEvents_ReceivedEvent e) inmsg.msg = e.lpszmsg; switch(inmsg.stype) case 0: // Data message if(inmsg.wbit && (inmsg.function % 2)!=0) - 30 -
// Need to reply something... outmsg.sml = "<b 0>"; outmsg.reply(e.lpszmsg); hsms.send(outmsg.msg); break; case 1: // Select request outmsg.sml = "Select.rsp"; outmsg.reply(e.lpszmsg); hsms.send(outmsg.msg); break; - 31 -
5.2.5 Windows 64 ビット 版 における 注 意 点 Windows の 64 ビット 版 で 動 作 させるにはアプリケーションを x86 モードにする 必 要 があります 上 記 を 参 考 にプロジェクト 設 定 を 変 更 してください - 32 -
5.3 Visual C++ 2008 と C# 2008 では 作 成 手 順 やソースコードは 極 めて 似 ていましたが VC++ 2008 の 場 合 は 少 し 異 なりま す 5.3.1 プロジェクトの 作 成 1 Visual Studio 2008 を 起 動 し File メニューから New Project をクリックします 2 Visual C++の MFC Application を 選 択 し プロジェクト 名 とフォルダを 指 定 します ここではプロジェクト 名 を SavoyTutorialVC2008 とします 入 力 が 完 了 したら OK ボタンをクリックします 3 ウェルカム 画 面 が 表 示 されます Next ボタンをクリックします - 33 -
4 Dialog based を 選 択 し Use Unicode libraries のチェックははずします 他 の 設 定 はデフォルトのままで 構 わないので Finish ボタンをクリックします - 34 -
5 新 規 のプロジェクトが 作 成 されました 5.3.2 フォームに Savoy を 配 置 1 下 記 のように SavoyHsms SavoySecsII をダイアログリソースに 配 置 します - 35 -
2 変 数 として 割 り 当 てます SavoyHsms オブジェクトを 選 択 して 右 クリックし Add Variable をクリックします 3 Variable type を CSavoyHsms に 変 更 し.h file と.cpp file もそれぞれ SavoyHsms.h SavoyHsms.cpp とします Variable name は m_hsms とし Finish ボタンをクリックします - 36 -
4 同 様 に SavoySecsII にも 変 数 を 割 り 当 てます Variable type を CSavoySecsII に 変 更 し.h file と.cpp file もそれぞ れ SavoySecsII.h SavoySecsII.cpp とします Variable name は m_inmsg および m_outmsg とします 5 レシピ 名 は CString 型 の 変 数 とし m_strppid とします - 37 -
5.3.3 ラッパークラスの 置 き 換 え Visual C++ 2008 は ActiveX コントロールのラッパークラス 作 成 に 関 する いくつかの 問 題 があります このため Jazz Soft では 不 具 合 対 策 用 のラッパークラスを 提 供 しています ラッパークラスは Visual C++ 6.0 でも 作 成 可 能 ですが enum が 反 映 されませ ん 1 Visual C++ 2008 を 終 了 し プロジェクトをいったん 閉 じます 2 SavoyHsms.h SavoyHsms.cpp SavoySecsII.h SavoySecsII.cpp を 上 書 きします 3 再 び Visual C++ 2008 を 起 動 し プロジェクトを 読 み 込 み 直 します 5.3.4 ボタンの 処 理 1 Open ボタンをクリックしたら SavoyHsms の 通 信 設 定 画 面 が 表 示 されるようにします その 後 OK ボタンが 押 されたら 接 続 するようにします 設 定 内 容 は Savoy.ini ファイルに 保 存 され 次 回 から 設 定 の 入 力 は 不 要 です void CSavoyTutorialVC2008Dlg::OnBnClickedButton1() // Setup m_hsms.loadinifile(); if(m_hsms.setup("")) // If OK button was pressed, establish connection m_hsms.setconnect(true); - 38 -
2 Online ボタンをクリックしたら S1F13 を 送 信 するようにします void CSavoyTutorialVC2008Dlg::OnBnClickedButton2() // Send S1F13 m_outmsg.setsml("s1f13w"); m_hsms.send(m_outmsg.getmsg()); 3 PP Select ボタンをクリックしたら リモートコマンドで PP-SELECT を 送 信 するようにします void CSavoyTutorialVC2008Dlg::OnBnClickedButton3() // Send S2F41 PP-Select UpdateData(); m_outmsg.setsml("s2f41w<a'pp-select'><a'ppid'><a'" + m_strppid + "'>"); m_hsms.send(m_outmsg.getmsg()); 4 PP Start ボタンをクリックしたら リモートコマンドで START を 送 信 するようにします void CSavoyTutorialVC2008Dlg::OnBnClickedButton4() // Send S2F41 Start m_outmsg.setsml("s2f41w<a'start'>"); m_hsms.send(m_outmsg.getmsg()); 5.3.5 イベントの 処 理 SavoyHsms からのイベントを 処 理 します イベントハンドラは プロパティウィンドゥから 作 成 できます - 39 -
1 Connected イベントが 来 たら セレクト 要 求 を 送 信 するようにします void CSavoyTutorialVC2008Dlg::ConnectedSavoyhsmsctrl1(LPCTSTR lpszipaddress, long lportnumber) // Connected // Send select request m_outmsg.setsml("select.req"); m_hsms.send(m_outmsg.getmsg()); 2 Received イベントが 来 たら メッセージ 内 容 を 解 析 するために SavoySecsII に 渡 します void CSavoyTutorialVC2008Dlg::ReceivedSavoyhsmsctrl1(LPCTSTR lpszipaddress, long lportnumber, LPCTSTR lpszmsg) m_inmsg.setmsg(lpszmsg); 3 返 信 の 必 要 なデータメッセージを 受 け 取 ったら 適 当 な 返 事 を 返 信 します switch(m_inmsg.getstype()) case 0: // Data message if(m_inmsg.getwbit() && m_inmsg.getfunction()%2) // Need to reply something... m_outmsg.setsml("<b 0>"); m_outmsg.reply(lpszmsg); m_hsms.send(m_outmsg.getmsg()); break; 4 セレクト 要 求 を 受 け 取 ったら セレクト 応 答 を 返 信 します case 1: // Select request m_outmsg.setsml("select.rsp"); m_outmsg.reply(lpszmsg); m_hsms.send(m_outmsg.getmsg()); break; 5.3.6 全 ソースコード 以 上 でミニホストの 完 成 です 全 ソースコードはいくつかのファイルで 構 成 されますので ここでは 載 せないことにします - 40 -
このプロジェクトはゼロからスクラッチで 作 った 訳 ですが ソフトの 中 心 である SavoyTutorialVC2008Dlg.cpp ファイルは 空 白 行 やコメントを 入 れてもたったの 231 行 しかありません 実 際 に 自 分 で 書 いたコードの 行 数 は コメントを 除 くとなんと 31 行 です 他 社 製 品 にあるような 訳 の 分 からない 設 定 ファイルもデータファイルも 書 きませんでした このような 驚 異 的 なまでの 簡 単 さは 他 社 では 真 似 のできない 芸 当 です - 41 -