2017-05-24 14 views
1

OCX 파일의 래퍼 클래스 역할을하는 ATL C++ 프로그램을 작성하고 있습니다. 이것은 dll로 빌드됩니다.vb6에서 const CURRENCY와 같은 C++의 데이터 유형은 무엇입니까?

내 문제 : OCX에는 CURRENCY 유형을 허용하는 메소드가 있습니다. 예 : 내 C++ 코드에서 OCXMethodName(long a, const CURRENCY & cy);

내가 디버깅하는 동안 나는 오류가 OCXMethodName 통화/CY 유형을 전달하려고합니다. 그 오류는 성공하지 못했음을 의미하는 0을 반환하지 않습니다. 데이터에 문제가 있습니다.

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

그것은 DLL로 구축되며, 본인은 단위 테스트 그것을 VBScript를 사용했다. 예 vbscript 코드 : Dim ret ret = objATL.MyMethod(11, 5000) '''This will call the C++ Method 실행시 "Microsoft (R) Windows 기반 스크립트 호스트"대화 상자가 팝업됩니다.

제 질문은 처리하거나 OCX 메서드에서 올바른 데이터 형식을 전달할 수있는 변환하는 가장 좋은 방법은 무엇입니까?

+1

무엇이 오류입니까? – themiurge

+0

'CY'는 어디에서 왔습니까? 유형은 문자 그대로'CURRENCY '입니다. – MSalters

+2

통화는 10000으로 스케일 된 값을 포함하고 소수점 이하 4 자리로 "고정 소수점"값으로 사용되는 64 비트 부호있는 정수입니다. 따라서 하나씩 7을 곱하면 64 비트 곱하기 7을 곱하면됩니다. 유형은 MIDL'[oleautomation]'인터페이스 정의에서'CURRENCY'입니다. – Bob77

답변

1

통화 변수는 내부적으로 4 바이트의 정수로 된 8 바이트 정수로 저장됩니다. 예를 들어, 1.25의 통화 값은 12500으로 저장됩니다. 희망이 올바른 방향으로 향하게합니다.