PrCEDemo
ソースコード C++
PrinterCE デモプログラムのソースコード (PrCEDemo) はここからダウンロードできます。
このZIPファイルにはPocket PCをサポートするeVCプロジェクトで使用されるフルソースコードが含まれています。 PrCEDemoを使用する前に評価版のPrinterCEを前もってダウンロードしてインストールする必要があります。
PrinterCEのC++プログラム内での使用
このPrinterCEのインストールと使用に関するインストラクションはMicrosoft's eVC Embedded Visual ToolsでC++プログラム作成のステップに精通していると仮定して書かれてます。
以下のサンプルコードの一部は(上記のテーブルからダウンロードした)PrinerCEのタイプライブラリをインポートするために#import statementを使用しています。
このタイプライブラリはPrinterCEにアクセスするために必要な情報を提供しています。 このプロジェクトはPrinterCEのようにActiveXを使用して動作する複雑なものを扱う為に"Smart
Pointer"を使用します。 以下のInitPrinterCE() function はPrinerCEがインストールされ、登録されているように使われています。
もしPrinterCEがインストール・登録されていれば、PrinterCEの例が作成されアプリケーションは印刷を始めます。 #include
"stdafx.h" #include <Atlbase.h>
//PrCEUser.h and PrEngineCE.tlb
are available for download from the table above #import "PrEngineCE.tlb"
raw_interfaces_only no_namespace #include "PrCEUser.h" //PrinterCE defs file
that defines all user constants
CComQIPtr<IPrinterCE> spPrinterCE;
/********************************************************* InitPrinterCE()
- Create instances of PrinterCE & BarcodeCE *********************************************************/ BOOL
InitPrinterCE() { CLSID clsid; HRESULT hr; hr=CLSIDFromProgID(_T("PrEngineCE.PrinterCE"),&clsid);
if (SUCCEEDED(hr)) { hr = spPrinterCE.CoCreateInstance(clsid);
} if (FAILED(hr)) { MessageBox(NULL,_T("Failed
to init PrinterCE"),_T("Init Failed..."),MB_OK); return
FALSE; } return TRUE; }
/********************************************************* TestFn()
- Simple "Hello World" test function *********************************************************/ void
TestFn() { if (InitPrinterCE()) {
/ Make sure we have an instance of PrinterCE - "spPrinterCE" is our instance
spPrinterCE->SelectPrinter(); //Have PrinterCE pop up Select Printer
dialog box //Send out "Hello World" at
default upper left printing position of page
spPrinterCE->DrawText(_T("Hello World"),NULL,NULL,NULL);
spPrinterCE->EndDoc(); //Done... print out our "Hello World"
} } C++
での問題
ActiveXコントロールがeVBでも動作するよう設計されているため、C++開発者が処理しなくてはいけない問題が幾つかあります。 Function
コール PrinterCEドキュメントはeVBの"Sub:サブルーチン"(値を返さないfunction)は括弧内にパラメータを置かない方法に従います。しかし"function"(これは値を返します)は括弧を使用します。C++は常に括弧を使用します。従ってドキュメントで
DrawCircleメソッドを次のように使用する場合:"object.DrawCircle x, y, radius, [color], [
aspect]"、C++プログラマはこれを:PrCE.DrawCircle(x,y,radius,color,aspect) のようにコンバートする必要があります。;
PrinterCE プロパティ
PrinterCEプロパティはあらかじめC++のプロパティ名に追加された"Get"または"Put"を必ず持ちます。例えばFontBoldプロパティはドキュメント内で次のように明示されます。:object.FontBold
[= Boolean]。eVBプログラム内ではこのプロパティを PrinterCE.FontBold=True で設定できます。C++プログラム内では
PrinterCE.SetFontBold(VARIANT_TRUE) のようにコールし、同じようにPrinterCEからカレントのX座標を取得するにはMFCは
xCoord=PrinterCE.GetTextX() とコールします。
VARIANT
BOOL
C++開発者はBoolean値をFALSEは0、TRUEは1と覚えていますが、eVBではTRUEは-1(FALSEは同じく0ですが)となります。C++ではVT_BOOLタイプをVARIANT_TRUEおよびVARIANT_FALSEと定義します。PrinterCE内のBoolean値が戻るfunctionはVARIANT_TRUE
または VARIANT_FALSEを探します。PrinterCEのfunctionは VARIANT_TRUE/VARIANT_FALSEはもちろんTRUE/FALSEでも動作するよう設計されていますが、Boolean値を返すPrinterCEでのfunctionではVARIANTバージョンを返します。
VARIANT
データタイプ "optional"
パラメータを使用するいくつかのPrinterCE function、例えばDrawTextメソッドはこのように定義され:"object.DrawText
string, [x], [y], [count]"、x, yとcountは"optional"となります。 C++内では全ての可能性のあるコールに対応するためにいくつかのDrawText()の設定ができるように、こういった種類のオプショナルパラメータは過負荷をかけるfunctionによって処理されます。eVBは過負荷のかかったfucntionに対応できないので、多くの"optional"パラメータはVARIANTデータタイプとして扱われます。
基本的に、VARIANTはVT_EMPTYを含む幅広い種類のデータタイプを意味します。eVBプログラムで1つまたはそれ以上のパラメータなしでPrinterCE
functionをコールする場合、eVBは自動的に「空」のVARIANTをその省略されたパラメータに適用します。C++プログラムでは代わりにNULL (0)を空のパラメータに適用し、PrinterCEは正しく動作します。ただしC++プログラムが自動的にそれらのオプショナルパラメータに値を適用する時には、必ずVARIANT値が適用されます。VARIANTS
を使用した例は以下にあります。
C++ の例 C++ PrinterCE デモプログラム(PrCEDemo)はここからダウンロードできます。
このZIPファイルにはPocket PCをサポートするeVCプロジェクトで使用されるフルソースコードが含まれています。
|