それで、私はたくさんの掘り出し物をしました。それは恐竜を探すようなものです。簡単ではなく、見つけるのが難しい。私はこれについてちょっとした良い方法を書くことになりますが、今のところ私は私の発見を掲載します. 私はまだこの 100% を持っていませんが、私は近いことを知っています.
typelib と activeX のことは大きな問題ではありませんが、使い始めてから問題になることがわかりました。ActiveX は Control オブジェクト用で、Typelib は Service オブジェクト用です。最も重要なことは、正しく始めることです。中国語のウェブサイトで、翻訳の間違いを見つけた後に役立つヒントを提供している記事を見つけました。まず、オートメーションを使用して C++ プロジェクトを作成します。ATL または MFC を指定できます。私の好みはMFCです。付録 A セクション 8 の UPOS 1.13 pdf (またはそれ以降) では、Service オブジェクトの責任について説明しています。実装する必要がある主なメソッドがあります。追加する必要があるメソッドは 16 個あり、OPOS デバイスのプロパティを取得/設定するメソッドは少なくとも 4 個あります。
そのため、開始するには、クラスの追加ウィザード (MFC クラス用) を開いて、[MFC クラスの追加] をクリックする必要があります。基本クラスを CCmdTarget にする必要があります。上品なクラス名を思いつきます (私は PinpadSOCPP を選びました) 次に、自動化ラジオ ボタンで [タイプ ID で作成可能] を選択します。タイプIDを[プロジェクト名].[クラス名]として入力する必要があるため、私のものはPinpadSO.PinpadSOCPPでした。ヒットフィニッシュ。これにより、クラス ビューを使用してメソッドなどを追加できる優れたインターフェイス ファイルが作成されます。
メソッドの追加に関しては、これについて注意すべき点が 2 つあります。そのうちの 1 つは、まだ 100% 把握できていません。1 つ目は、そのセクションのすべてのメソッドを正しいパラメーターと戻り値で実装する必要があることです。それらのほとんどは LONG (32 ビットの符号付き数値) を返します。最も一般的な 2 つのパラメータは、LONG と BSTR です。(「out」パラメーターがある場合のポインターが時折あります)これは、すべて正しく実装されているかどうかがわからないため、現在失敗していると思われる部分であり、それがエラー104/を取得している理由です305 (中国の記事によると、メソッドに何かが欠けていると書かれています) 大文字と小文字が区別されるかどうかはわかりません。私が仕事で取り組んでいる MSR SO がそれらすべてを使用しておらず、その SO が機能しているため、どのプロパティを実装する必要があるかを取得/設定する必要があると思われる 7 つのプロパティがわからない。もう 1 つは、基本 OPOS メソッドを実装した後、特定の OPOS デバイスから追加のメソッドも実装する必要があることです。私は PINPad を行っているので、実装する必要がある追加のメソッドが 6 つあります。
クラスビューを開いてプロジェクトクラスの名前に移動する必要があるため、これは非常に時間のかかる作業です。それを展開して、インターフェース部分に移動します。私のプロジェクト名は PinpadSO で、これを実装しているファイルは PinpadSOCPP です (つまり、インターフェイス名は IPinpadSOCPP です) IPinpadSOCPP を右クリックし、[追加] > [メソッドの追加] をクリックします。これにより、2 段階のプロセスが実行されます。戻り値、関数の名前を入力し、すべてのパラメーターを追加します。[次へ] をクリックし、(必要に応じて) ヘルプ文字列情報を入力して、[終了] をクリックします。これを 20 回以上行うと、古くて遅くなります...そして、私のようであれば、Compute の代わりに Computer と入力し、フリップフロップ文字を入力するか、すべてのパラメーターを追加するのを忘れます。メソッドを追加するたびに変更される 3 つのファイルを編集する素敵な小さなプログラムを作成して、大幅に高速化することができます。間違えた場合は、開く必要があります[project name].idl
、[class name].h
、および[class name].cpp
これらは、メソッドを直接追加する 3 つのファイルです。間違えないことをお勧めします。
これで、すべてのハードワークが邪魔になりません。プログラムをコンパイルします。余分な手順を省きたい場合は、リンカー プロジェクト設定で自動登録をオンにすることができます (注: これを行うと、Vista 以降でプログラムする場合は、Visual Studio を管理者として実行する必要があります)。コマンド ウィンドウ (管理者) を開いて DLL に移動し、その DLL でコマンド regsvr32 を使用する必要はありません。良い点は、何度も何度も行う必要がないことです。1 回だけで十分です。毎回そのように動作するという確固たる事実はありませんが、私が取り組んでいる MSR SO に変更を加えてコンパイルし、OPOS テスター プログラムを開くと、変更が有効になります。
その後、レジストリを追加する必要があります。HKLM\software\OLEforRetail\ServiceOPOS に移動します ( x64 マシンを使用している場合は、これを 2 回行うことに注意してください。そこで 1 回、HKLM\software\Wow6432Node\OLEforRetail\ServiceOPOS でもう一度実行します) 。
使用している OPOS デバイスのキーを追加する必要があります。ピンパッド SO を作成しているので、PINPad というキーを作成しました (UPOS ドキュメントを参照して、どのような名前を付ける必要があるかを確認してください)。最後に、デバイスの名前を選択します。ベンダーからのモデル タイプをデバイス名 (C100) として選択し、PINPad でサブ キーを作成しました。デフォルトの REG_SZ 値は、登録済みの SO デバイス タイプ ID である必要があります。私の場合は PinpadSO.PinpadSOCPP です
OPOS テスト プログラム (コンソール プログラムとして独自に作成したもの) をお持ちでない場合は、Microsoft OPOS テスト アプリを使用できます (私の x64 マシンでは動作しませんでした.... 'それで運が良くなるでしょう) 独自の OPOS テストアプリを作成することに決めた場合は、x86 マシン用にコンパイルするようにしてください (x64 を使用している場合でも) OPOS は何らかの理由で x64 を好みません (おそらくポインターの長さ)仮定します..とにかく。すべてのセットアップが完了したら、テストアプリを実行します(私の場合、私は実行しているだけでOPOSPinpadClass pin = new OPOSPinpadClass(); Console.WriteLine(pin.Open("C100"));
、0を望んでいます:)
私は現在104(E_NOSERVICE)を取得しています..前に言ったように、すべての方法が正しいわけではないからだと思います。その場合は、この回答を編集するか、報告して実際にどうだったかをお伝えします。とにかく、これが自分のSOを作りたいと決心した他の人に役立つことを願っています. 幸運を
アップデート
Open コマンドを呼び出すと、OPOS はいくつかのプロパティをチェックします。実装する必要があるプロパティの 1 つは、GetPropertyNumber の ですPIDX_ServiceObjectVersion
。私は OPOS 1.13 と互換性があるので、この数値を返すように設定する必要があります(1000000 * majorVersion) + (1000 * minorVersion) + revision
。SO に返される ServiceObjectVersion は 1013000 です。また、GetPropertyString に 3 つのプロパティを実装する必要があります。
PIDX_DeviceDescription
PIDX_DeviceName
PIDX_ServiceObjectDescription
他のすべての値については、それらすべてを接続し始めるまで、空の文字列または 0 を返すことができます。
補足として、C++ で作成したくない場合は、作成する必要はありません。ActiveX オブジェクトを記述できる任意の言語 (COM 可視 .NET クラス ライブラリなど) で作成できます。