Visual C++ (VC++) で Aztec バーコードを印刷する方法

Barcodesoft BCSAztec TrueType フォントと COM コンポーネントを使用して、Visual C++ アプリケーションに高速な Aztec バーコード生成機能を統合します。

必要なコア コンポーネント

VC++ で Aztec エンコーディングを実装するには、以下のファイルが揃っていることを確認してください。

  • 1. bcsaztec.ttf: バーコード描画用の専用 TrueType フォント。
  • 2. cruflbcs.dll: IAztec インターフェースを提供する COM ライブラリ。
注: インストール後、DLL は通常以下の場所に配置されます。
C:\Program Files (x86)\Common Files\Barcodesoft\Fontutil\

方法 1: 遅延バインディング

バージョンの独立性を保つのに理想的です。コンパイル時に型情報が利用できない場合に使用します。

CoInitialize(NULL); 
CLSID clsid;
if (FAILED(::CLSIDFromProgID(L"cruflbcs.Aztec.1", &clsid))) return 0;

IDispatch* pIDispatch = NULL;
::CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch);

// Encode メソッドの呼び出し
LPOLESTR szNameEncode = L"Encode";
DISPID dispid_encode;
pIDispatch->GetIDsOfNames(IID_NULL, &szNameEncode, 1, LOCALE_SYSTEM_DEFAULT, &dispid_encode);

VARIANTARG v[1];
v[0].vt = VT_BSTR; v[0].bstrVal = SysAllocString(L"Barcodesoft Sample");
DISPPARAMS dispParams = { v, NULL, 1, 0 };
VARIANT vResult;
pIDispatch->Invoke(dispid_encode, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, &dispParams, &vResult, NULL, NULL);

pIDispatch->Release();
CoUninitialize();

方法 2: 事前バインディング

最大限のパフォーマンスが推奨される場合に使用します。コンパイル時にタイプライブラリへのアクセスが必要です。

#include <atlbase.h>
#include <atlconv.h>
#import "cruflbcs.dll"
using namespace cruflBCS;

USES_CONVERSION;
CoInitialize(NULL);
_bstr_t bstrOutput;
char pszToEncode[] = "Barcodesoft Sample";

try {
    cruflBCS::IAztecPtr pBcsAztec(__uuidof(CBcsAztec));
    bstrOutput = pBcsAztec->Encode(T2OLE(pszToEncode));} catch (const _com_error& e) {
    _tprintf(_T("Error: 0x%08x %s\n"), e.Error(), e.ErrorMessage());}
CoUninitialize();

MFC を使用したラッパークラスの生成

最新の Visual Studio での手順:

  1. プロジェクト メニューから [クラスの追加] を選択します。
  2. [タイプライブラリからの MFC クラス] を選択します。
  3. [レジストリ] を選択し、[crUFLBCS] を探します。
  4. [IAztec] インターフェースをプロジェクトに追加します。
  5. OleInitialize(NULL) を使用して初期化します。

// MFC 実装例

CString strOutput;
IAztec *pAztecObj = new IAztec();
if (pAztecObj->CreateDispatch("cruflbcs.Aztec.1")) {
    strOutput = pAztecObj->Encode("Barcodesoft Sample");}