• 検索結果がありません。

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

N/A
N/A
Protected

Academic year: 2021

シェア "API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D"

Copied!
11
0
0

読み込み中.... (全文を見る)

全文

(1)

GS1-128 の描画 DLL について

(ver. 2.2) 動作環境など 動作環境 WindowsXP、Windows Vista、Windows7、Windows8/8.1、Windows10 ※ 上記 OS について、すべて日本語版を対象としております。 ※ 32bit アプリケーションから呼び出される必要があります。 使用条件 プリンタの解像度 300dpi 以上 機能 ・バーコードの基本幅を 1 ドット単位で指定できる ・プリンタの解像度を考慮した補正機能により黒セルが太る場合に対応 ・43 桁の GS1-128 コードからチェックデジットの計算が出来る ・各種データ(メーカコード・会社コードなど)を指定することにより 44 桁の GS1-128 コードが 出来る 利用可能なメーカーコード 550056 企業負担 929023 企業負担 959879 顧客負担 929233 税 959881 料 959909 水道 929407 リアル

(2)

■ API 連携方式

外部 DLL の呼び出し宣言

外部 DLL の呼び出し宣言のサンプルコード(Microsoft Visual C# .NET の場合) プログラムコードの先頭で

using System.Runtime.InteropServices; が必要。

クラスの内部に以下のような外部 DLL の呼び出し宣言を加える。

外部 DLL の呼び出し宣言のサンプルコード(Microsoft Visual Basic .NET の場合) クラスの内部に以下のような外部 DLL の呼び出し宣言を加える。

//外部DLLの呼び出し(Ean128_API) private sealed classEan128_API

{

[DllImport("Ean128_API.dll", EntryPoint = "DrawEan128")]

public static extern int DrawEan128(IntPtr hDC, int bTani, int bPointX, int bPointY, int bHeight, int bWidth, int bAdjust, string bEANCode);

[DllImport("Ean128_API.dll", EntryPoint = "MakeEanData")]

public static extern int MakeEanData(StringBuilder eanBuffer, string eanMakerCD, string eanCompCD, string eanCode, string eanDueDate, int eanKingaku, int eanKijungaku); [DllImport("Ean128_API.dll", EntryPoint = "CalCheckDigit")]

public static extern int CalCheckDigit(StringBuilder Buffer, string EanCode); }

'外部DLLの呼び出し(Ean128_API)

Private NotInheritable Class Ean128_API

Public Declare Function DrawEan128 Lib "Ean128_API.dll" Alias "DrawEan128" (ByVal hDC As IntPtr, ByVal bTani As Integer, ByVal bPointX As Integer, ByVal bPointY As Integer, ByVal bHeight As Integer, ByVal bWidth As Integer, ByVal bAdjust As Integer, ByVal bEANCode As String) As Integer

Public Declare Function MakeEanData Lib "Ean128_API.dll" Alias "MakeEanData" (ByVal eanBuffer As StringBuilder, ByVal eanMakerCD As String, ByVal eanCompCD As String, ByVal eanCode As String, ByVal eanDueDate As String, ByVal eanKingaku As Integer, ByVal eanKijungaku As Integer) As Integer

Public Declare Function CalCheckDigit Lib "Ean128_API.dll" Alias

"CalCheckDigit" (ByVal Buffer As StringBuilder, ByVal EanCode As String) As Integer

(3)

DrawEan128 44 桁の GS1-128 コードを受け取って目視文字付きバーコードを表示 目視文字はデバイスコンテキストに選択されているフォントを使用 引数 HDC バーコードを描画するデバイスコンテキストのハンドル long 表示位置・高さ・基本モジュール幅の単位 0 :物理座標(ピクセル) 1 :1/1000 インチ 2 :1/100mm long バーコード表示左位置 long バーコード表示上位置 long バーコード表示高さ long バーコード基本モジュール幅 long 解像度によるモジュール幅の調整を行うか否か 0 :調整を行わない 1 :調整を行う(解像度が 300 DPI 以下ならばスペースを 1 ドッ ト広げ、300 DPI を超えるならば、バーを 1 ドット狭める) 2 :調整を行う(解像度にかかわらずスペースを 1 ドット広げ、 かつ、バーを 1 ドット狭める) LPCSTR GS1-128 コード 戻り値 long エラーコード 0 :成功 8 :メモリ不足 87 :引数エラー 536870925:メーカコードエラー 536870924:試使用期限切れ 主要コードは以上ですが、ほかにもエラーコードあり

(4)

DrawEan128 利用のサンプルコード(Microsoft Visual C# .NET の場合)

注意:プログラムロジックにおいて、DrawEan128 関数より以前の処理でプリンタへの出力を何も 行っていない場合、上記サンプルにあるようなダミー出力が必要となります。

private System.Drawing.Printing.PrintDocument printDocument1;

'印刷作業

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {

StringBuilder bufCD = new StringBuilder(); int intErrCheck; int w_Tani; int w_PointX; int w_PointY; int w_Height; int w_Width; int w_Adjust; IntPtr w_hdc; string w_EanCD; //サンプルプログラム画面より取得した情報を関数パラメータにセット

w_Tani = int.Parse(Tx_Tani.Text); w_PointX = int.Parse(Tx_PointY.Text); w_PointY = int.Parse(Tx_PointX.Text); w_Height = int.Parse(Tx_Height.Text); w_Width = int.Parse(Tx_Width.Text); w_Adjust = int.Parse(Tx_Adjust.Text); w_EanCD = Tx_EAN.Text;

//ダミー出力

e.Graphics.DrawString("", printFont, Brushes.Black, 30, 30); //関数呼び出し

intErrCheck = Ean128_API.DrawEan128(e.Graphics.GetHdc(), w_Tani, w_PointX, w_PointY, w_Height, w_Width, w_Adjust, w_EanCD);

//印刷データの開放 e.Graphics.ReleaseHdc(); //戻り値判定

if (intErrCheck == 8) {

MessageBox.Show("Memory shortage"); //メモリ不足 }

else if (intErrCheck == 87) {

MessageBox.Show("Argument Error"); //引数エラー }

else if (intErrCheck == 536870925) {

MessageBox.Show("MakerCode Error"); //メーカコードエラー }

else if (intErrCheck == 536870924) {

MessageBox.Show("Being out of Trial Period "); //試用期限切れ }

else if (intErrCheck != 0) {

MessageBox.Show("Otherwise Error"); //その他のエラー }

}

////バーコード印字

private void Command_exec_Click(object sender, EventArgs e) {

this.printDocument1.PrintPage += new

System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage); //結果印刷

this.printDocument1.Print(); }

(5)

DrawEan128 利用のサンプルコード(Microsoft Visual Basic .NET の場合)

注意:プログラムロジックにおいて、DrawEan128 関数より以前の処理でプリンタへの出力を何も 行っていない場合、上記サンプルにあるようなダミー出力が必要となります。

Private printDocument1 As System.Drawing.Printing.PrintDocument

'印刷作業

Private Sub printDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)

Dim bufCD As New StringBuilder() Dim intErrCheck As Integer Dim w_Tani As Integer Dim w_PointX As Integer Dim w_PointY As Integer Dim w_Height As Integer Dim w_Width As Integer Dim w_Adjust As Integer Dim w_EanCD As String

'サンプルプログラム画面より取得した情報を関数パラメータにセット w_Tani = Integer.Parse(Tx_Tani.Text) w_PointX = Integer.Parse(Tx_PointY.Text) w_PointY = Integer.Parse(Tx_PointX.Text) w_Height = Integer.Parse(Tx_Height.Text) w_Width = Integer.Parse(Tx_Width.Text) w_Adjust = Integer.Parse(Tx_Adjust.Text) w_EanCD = Tx_EAN.Text 'ダミーデータの出力

e.Graphics.DrawString("", printFont, Brushes.Black, 30, 30) '関数呼び出し

intErrCheck = Ean128_API.DrawEan128(e.Graphics.GetHdc(), w_Tani, w_PointX, w_PointY, w_Height, w_Width, w_Adjust, w_EanCD)

'プリントデータの開放 e.Graphics.ReleaseHdc() '戻り値判定

If intErrCheck = 8 Then

MessageBox.Show("Memory shortage") 'メモリ不足 ElseIf intErrCheck = 87 Then

MessageBox.Show("Argument Error") '引数エラー ElseIf intErrCheck = 536870925 Then

MessageBox.Show("MakerCode Error") 'メーカコードエラー ElseIf intErrCheck = 536870924 Then

MessageBox.Show("Being out of Trial Period ") '試用期限切れ ElseIf intErrCheck <> 0 Then

MessageBox.Show("Otherwise Error") 'その他のエラー End If

'結果印刷 End Sub

'印刷ボタン押下時

Private Sub Command_exec_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Command_exec.Click

'PrintPageイベントハンドラの追加

AddHandler printDocument1.PrintPage, AddressOf printDocument1_PrintPage '結果印刷

Me.printDocument1.Print() End Sub

(6)

MakeEanData 各項目データから 44 桁の GS1-128 コードを作成 引数 LPSTR 作成 GS1-128 コード格納バッファ(45 バイト) LPCSTR メーカーコード LPCSTR 企業コード LPCSTR コード LPCSTR 支払期限 long 金額 long 印紙基準金額 戻り値 long エラーコード 0 :成功 8 :メモリ不足 87 :引数エラー 536870925:メーカコードエラー 536870924:試使用期限切れ データは以下のように編集し、44 桁の GS1-128 コードを作成 ・ メーカーコードは 6 桁で設定。 ・ 支払期日がない場合、”999999”を設定 ・ 支払期日が 5 桁の場合、システム時刻を基に先頭に 1 桁の数値を付加 ・ 印紙基準金額が-1 の場合、印紙フラグは’0’ ・ 印紙基準金額 =< 金額の場合、印紙フラグは’1’ ・ 印紙基準金額 > 金額の場合、印紙フラグは’0’

(7)

MakeEanData 利用のサンプルコード(Microsoft Visual C# .NET の場合) //EANコードの作成

private void EanGen_Click(object sender, EventArgs e)

{

StringBuilder eanBuffer = new System.Text.StringBuilder(44); int intErrCheck = 0; int w_Amount = 0; int w_TaxBorder = 0; //サンプルプログラム画面より取得したバーコード情報を関数パラメータにセット w_Amount = int.Parse(Tx_Amount.Text); w_TaxBorder = int.Parse(Tx_TaxBorder.Text); //関数呼び出し

intErrCheck = Ean128_API.MakeEanData(eanBuffer, Tx_MakerCD.Text, Tx_CompCD.Text, Tx_KanyuCD.Text, Tx_PayDate.Text, w_Amount, w_TaxBorder); //戻り値判定

if (intErrCheck == 8) {

MessageBox.Show("Memory shortage"); //メモリ不足 }

else if (intErrCheck == 87) {

MessageBox.Show("Argument Error"); //引数エラー }

else if (intErrCheck == 536870925) {

MessageBox.Show("MakerCode Error"); //メーカコードエラー }

else if (intErrCheck == 536870924) {

MessageBox.Show("Being out of Trial Period "); //試用期限切れ }

else if (intErrCheck != 0) {

MessageBox.Show("Otherwise Error"); //その他のエラー }

////(結果表示)チェックデジット追加済みEANコードを表示 Tx_EAN.Text = eanBuffer.ToString();

(8)

MakeEanData 利用のサンプルコード(Microsoft Visual Basic .NET の場合) 'EANコードの作成

Private Sub EanGen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles EanGen.Click

Dim eanBuffer = New System.Text.StringBuilder(44) Dim intErrCheck As Integer = 0

Dim w_Amount As Integer = 0 Dim w_TaxBorder As Integer = 0

'サンプルプログラム画面より取得したバーコード情報を関数パラメータにセット w_Amount = Integer.Parse(Tx_Amount.Text)

w_TaxBorder = Integer.Parse(Tx_TaxBorder.Text) '関数呼び出し

intErrCheck = Ean128_API.MakeEanData(eanBuffer, Tx_MakerCD.Text, Tx_CompCD.Text, Tx_KanyuCD.Text, Tx_PayDate.Text, w_Amount, w_TaxBorder) '戻り値判定

If intErrCheck = 8 Then

MessageBox.Show("Memory shortage") 'メモリ不足 ElseIf intErrCheck = 87 Then

MessageBox.Show("Argument Error") '引数エラー ElseIf intErrCheck = 536870925 Then

MessageBox.Show("MakerCode Error") 'メーカコードエラー ElseIf intErrCheck = 536870924 Then

MessageBox.Show("Being out of Trial Period ") '試用期限切れ ElseIf intErrCheck <> 0 Then

MessageBox.Show("Otherwise Error") 'その他のエラー End If

'//(結果表示)チェックデジット追加済みEANコードを表示 Tx_EAN.Text = eanBuffer.ToString()

(9)

CalCheckDigit 43 桁の GS1-128 コードからチェックデジットを計算 引数 LPSTR チェックデジット文字の格納バッファ(2 バイト) LPCSTR GS1-128 コード 戻り値 long エラーコード 0 :成功 8 :メモリ不足 87 :引数エラー 536870925:メーカコードエラー 536870924:試使用期限切れ

(10)

CalCheckDigit 利用のサンプルコード(Microsoft Visual C# .NET の場合)

CalCheckDigit 利用のサンプルコード(Microsoft Visual Basic .NET の場合) ////43 桁のEan128 コードからチェックデジットを計算

private void CalCheckDigit_Click(object sender, EventArgs e) {

int intErrCheck;

StringBuilder buffer = newStringBuilder(); String eanCode = "";

//サンプルプログラム画面より取得した情報を関数パラメータにセット eanCode = Tx_EAN.Text;

//関数呼び出し

intErrCheck = Ean128_API.CalCheckDigit(buffer, eanCode); //戻り値判定

if (intErrCheck == 8) {

MessageBox.Show("Memory shortage"); //メモリ不足 }

else if (intErrCheck == 87) {

MessageBox.Show("Argument Error"); //引数エラー }

else if (intErrCheck == 536870925) {

MessageBox.Show("MakerCode Error"); //メーカコードエラー }

else if (intErrCheck != 0) {

MessageBox.Show("Otherwise Error"); //その他のエラー }

////計算したチェックデジットを追加 Tx_EAN.Text += buffer.ToString(); }

(11)

'//43 桁のEan128 コードからチェックデジットを計算

Private Sub CalCheckDigit_Click(ByVal sender As Object, ByVal e As EventArgs) Handles CalCheckDigit.Click

Dim intErrCheck As Integer

Dim buffer As New StringBuilder() Dim eanCode As [String] = ""

'サンプルプログラム画面より取得し情報を関数パラメータにセット eanCode = Tx_EAN.Text

'関数呼び出し

intErrCheck = Ean128_API.CalCheckDigit(buffer, eanCode) '戻り値判定

If intErrCheck = 8 Then

MessageBox.Show("Memory shortage") 'メモリ不足 ElseIf intErrCheck = 87 Then

MessageBox.Show("Argument Error") '引数エラー ElseIf intErrCheck = 536870925 Then

MessageBox.Show("MakerCode Error") 'メーカコードエラー ElseIf intErrCheck <> 0 Then

MessageBox.Show("Otherwise Error") 'その他のエラー End If

'//計算したチェックデジットを追加 Tx_EAN.Text += buffer.ToString() End Sub

参照

関連したドキュメント

第 5

(7)

このエアコンは冷房運転時のドレン(除湿)水を内部で蒸発さ

このような状況の下で、当業界は、高信頼性及び省エネ・環境対応の高い製品を内外のユーザーに

外貨の買付を伴うこの預金への預入れまたは外貨の売却を伴うこの預金の払戻し(以下「外

パターン1 外部環境の「支援的要因(O)」を生 かしたもの パターン2 内部環境の「強み(S)」を生かした もの

汚染水の構外への漏えいおよび漏えいの可能性が ある場合・湯気によるモニタリングポストへの影

事業所や事業者の氏名・所在地等に変更があった場合、変更があった日から 30 日以内に書面での