2017-05-24 3 views
1

Ich schreibe ein ATL C++ - Programm, das als Wrapper-Klasse einer OCX-Datei dient. Dies wird als DLL erstellt.Welcher Datentyp in C++ entspricht in Vb6 const CURRENCY?

Mein Problem: In OCX gibt es eine Methode, die CURRENCY-Typ akzeptiert. Ex: OCXMethodName(long a, const CURRENCY & cy);

In meinem C++ Code, wenn ich versuche zu WÄHRUNG/CY-Typ in OCXMethodName passiere ich einen Fehler beim Debuggen. Der Fehler ist, dass es 0 nicht zurückgibt, was nicht Erfolg bedeutet. Etwas stimmt nicht mit den Daten.

See Ex: STDMETHODIMP CMethod::MyMethod(LONG var_a, CURRENCY amount) { ... long lRet = OCX->OCXMethodName(var_a, amount); //This will execute in OCX ... }

Es wird als dll werden bauen und ich Vbscript weiter Unit-Test es. Ex vbscript code: Dim ret ret = objATL.MyMethod(11, 5000) '''This will call the C++ Method Bei der Ausführung "Microsoft (R) Windows Based Script Host" Pop-up-Dialogfeld.

Meine Frage ist, was ist der beste Weg, um Währung zu behandeln oder zu konvertieren, damit ich den richtigen Datentyp in der OCX-Methode übergeben konnte?

+1

Was ist der Fehler? – themiurge

+0

Woher kommt der 'CY'? Der Typ ist buchstäblich 'CURRENCY'. – MSalters

+2

Währung ist eine 64-Bit-Ganzzahl mit Vorzeichen, die Werte enthält, die auf 10000 skaliert sind und als Festkommawert mit 4 Dezimalstellen verwendet werden. Um also eins mit 7 zu multiplizieren, machst du einfach eine 64-Bit-Multiplikation mit 7 und so weiter. Der Typ ist 'CURRENCY' in MIDL' [oleautomation] 'Interface-Definitionen. – Bob77

Antwort

1

Eine Währungsvariable wird intern als acht Byte lange Ganzzahl mit vier angenommenen Dezimalstellen gespeichert. Zum Beispiel würde ein Währungswert von 1,25 als 12500 gespeichert werden. Hoffe das zeigt Ihnen in die richtige Richtung.