C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[29454] import된 ActiveX Control 함수가 배열을 포함한 Variant값을 리턴할때..
smleelms [smleelms] 1435 읽음    2004-04-21 20:41
제가 ActiveX 컴퍼넌트를 BCB에서 임포트해서 사용하고 있습니다.

이 컴퍼넌트에서 사용되는 함수의 리턴값이 Variant 인데, double 배열을 리턴합니다.
그래서 VB에서의 함수원형은 다음과 같습니다.

Syntax : myClass.Func( x, y, z, p)
Return Type : Variant
Parameters :
    x[Input] As Variant
    y[Input] As Variant
    z[Input] As Variant
    p[Input/Output] As Variant
   
아울러 VB에서의 사용예제는 다음과 같습니다.

    Dim vData As Variant
    Dim p As Variant
    p = 0
   
    Const x = 1000
    Const y = 1
    Const z = 10
    vData = myClass1.Func(x, y, z, p)
   
그리고 BCB로 임포트된 함수는 다음과 같습니다.

=== _TLB.h ===
    VARIANT __fastcall Func(VARIANT x, VARIANT y, VARIANT z, VARIANT* p)
    {
      _TDispID _dispid(/* Func */ DISPID(13));
      TAutoArgs<4> _args;
      _args[1] = x /*[VT_VARIANT:0]*/;
      _args[2] = y /*[VT_VARIANT:0]*/;
      _args[3] = z /*[VT_VARIANT:0]*/;
      _args[4] = p /*[VT_VARIANT:1]*/;
      OleFunction(_dispid, _args);
      return _args.GetRetVariant();
    }
   
    VARIANT __fastcall Func(VARIANT x, VARIANT y, VARIANT z, VARIANT* p);
   
    template <class T> VARIANT __fastcall
    _DmyClassDispT<T>::Func(VARIANT x, VARIANT y, VARIANT z, VARIANT* p)
    {
      _TDispID _dispid(*this, OLETEXT("Func"), DISPID(13));
      TAutoArgs<4> _args;
      _args[1] = x /*[VT_VARIANT:0]*/;
      _args[2] = y /*[VT_VARIANT:0]*/;
      _args[3] = z /*[VT_VARIANT:0]*/;
      _args[4] = p /*[VT_VARIANT:1]*/;
      OleFunction(_dispid, _args);
      return _args.GetRetVariant();
    }

=== _OCX.h ===
    VARIANT __fastcall Func(VARIANT x, VARIANT y, VARIANT z, VARIANT* p);

=== _OCX.cpp ===
    VARIANT __fastcall TmyClass::Func(VARIANT x, VARIANT y, VARIANT z, VARIANT* p)
    {
      return GetDefaultInterface()->Func(x, y, z, p);
    }
   
   
문제는 VARIANT* p 파라메터를 주는 방법과 리턴되는 VARIANT 값을 받는 방법을 모르겠습니다.

Variant x,y,z;
Variant p(OPENARRAY(int,(0,200)),varDouble);
Variant vData;

vData = myClass->Func(x, y, z, p);

뭐.. 이런식으로 내지는 여러가지 제가 할 수 있는 표현은 다 이용을 해도 vData에 값이 넘어오지를 않습니다.
VB에서는 리턴값인 vData와 p 값이 Variant로 배열이 드나들면서 배열값이 리턴이 되는데...
제 실력으로는 3일동안 머리만 쥐어뜯고 있네욤..
다른 임포트된 함수들도 저런식으로 배열을 가지는 Variant를 리턴하기 때문에 꼭 해결이 되어야 되는데..

누구 언질을 주실 고수분 안계시나요....

+ -

관련 글 리스트
29454 import된 ActiveX Control 함수가 배열을 포함한 Variant값을 리턴할때.. smleelms 1435 2004/04/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.