2017-05-24 15 views
1

OCXファイルのラッパークラスとして機能するATL C++プログラムを作成しています。これはdllとして構築されます。vb6のconst CURRENCYに相当するC++のデータ型は何ですか?

問題: OCXでは、CURRENCY型を受け入れるメソッドがあります。 例:私のC++コードで OCXMethodName(long a, const CURRENCY & cy);

私はOCXMethodNameにCURRENCY/CYタイプを渡すしようとすると、私はデバッグ中にエラーが発生します。エラーは、0を返していないということです。これは成功しないことを意味します。データに問題があります。

を参照してください例: STDMETHODIMP CMethod::MyMethod(LONG var_a, CURRENCY amount) { ... long lRet = OCX->OCXMethodName(var_a, amount); //This will execute in OCX ... }

それはDLLとして構築され、私はさらに、ユニットテスト、それにVBScriptを使用しました。 Ex vbscript code: Dim ret ret = objATL.MyMethod(11, 5000) '''This will call the C++ Method "Microsoft(R)Windows Script Host"ダイアログがポップアップ表示されます。

私の質問は、OCXメソッドで正しいデータ型を渡すことができるように、CURRENCYを処理または変換する最良の方法は何ですか?

+1

エラーは何ですか? – themiurge

+0

「CY」はどこから来たのですか?型は文字通り 'CURRENCY'です。 – MSalters

+2

通貨は、10000でスケールされた値を含む64ビット符号付き整数で、小数点以下4桁の「固定小数点」値として使用されます。したがって、1を7で掛けるには、64ビットの乗算を7回行うなどです。タイプは、MIDLの[oleautomation]インタフェース定義の 'CURRENCY'です。 – Bob77

答えて

1

通貨変数は、想定される小数点以下4桁の8バイト長整数として内部的に格納されます。たとえば、1.25の通貨値は12500として格納されます。これが正しい方向に向いてくれることを願っています。

関連する問題