0

そのため、職場では、いくつかの異なる目的で OPOS ドライバーに数か月取り組んできました。私はプロジェクトを作成しませんでしたが、私はそれを引き継ぎ、それを開発しているのは私だけです。だから今日、私はそれが行われた方法に興味があり、間違った足で始まったのではないかと思う. MCS (Monroe Consulting Services) という会社の OPOS ドライバーが使用されていることを確認するために、少し調べてみました。1.13 をダウンロードして、MSI バージョンをインストールしました。VSを起動して、新しいmfc dllを作成しました。次に、クラスを追加しました。これは私が混乱しているところです。

Typelib を選択するか ActiveX を選択するかは問題ではありません。通常、追加/拡張できるインターフェイスの同じリストが表示されます (MSR で思い浮かぶ 1 つの例外を除いて、拡張可能なイベント インターフェイスがあります)。同じヘッダー ファイル (msr の場合は COPOSMSR.h) を作成しますが、一方は CCmdTarget を拡張し、もう一方は CWnd を拡張します。これは私の最初の質問です。どちらを選ぶべきですか?typelib とは何か、ActiveX コンポーネントとは何か、それらはどのように異なるのか。

私が取り組んできたのは、CCmdTarget を拡張したものです。私の人生では、ドライバーがファイル (USNMSRRFI​​D) の 1 つを使用することをどのように認識しているかを理解することはできませんが、それがすべての開発が行われた場所です。(私はそれを少し分割したので、1 つの巨大なファイルではありませんでした)しかし、そのファイルは COPOSMSR を拡張しません..CCmdTarget も拡張します。USNファイルがMSRRFI​​D.idlにあると言及しているのを見るのは唯一の時間です(これは私をさらに混乱させます)これについて明確な人はいますか?

私の一部は、これが展開するときに非常に大きな影響を与える可能性があると考えています. このドライバーを利用するために作成されたいくつかのテスト アプリでは、さまざまなドライバーの登録、特定のフォルダーへのファイルのコピー、レジストリの設定など、やや複雑なセットアップ プロセスが必要です。これが何を意味するのか、また、これらの OPOS デバイスの 1 つを適切に拡張する優れたアプリケーションを作成する方法を理解できれば、将来、さらに悲しみを癒すことができると思います。

ヒントや指針はありますか?それが初心者の質問である場合は申し訳ありません..しかし、私はC ++が初めてです。私は Java から始めて C# に移行したので、このようなことのいくつかは私の頭を悩ませています....

4

1 に答える 1

1

それで、私はたくさんの掘り出し物をしました。それは恐竜を探すようなものです。簡単ではなく、見つけるのが難しい。私はこれについてちょっとした良い方法を書くことになりますが、今のところ私は私の発見を掲載します. 私はまだこの 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 クラス ライブラリなど) で作成できます。

于 2013-01-01T02:56:17.453 に答える