|
제가 비주얼베이직에서 사용하고 있는 DLL 을 빌더에서 Type_Library 를 이용하여 콤포넌트로 추가 하였습니다.
OLE Automation 과 연관 있는 건데요.
아래는 비주얼 베이직에서는 아래와 같이 함수를 콜 하는데..
Public EuroThermComName As String
Public EuroThermPV(8) As String
Dim ItemServerHandles() As Long ' Server Handle ( OPCServer -> OPCCleint )
Dim ClientHandles(1) As Long ' Client Handle ( OPCServer <- OPCCleint )
Dim OPCItemIDs(1) As String ' OPC ItemName
Dim Errors() As Long
Dim I As Integer
ClientHandles(1) = 1
OPCItemIDs(1) = Trim(EuroThermComName & EuroThermPV(I))
OPCMyPVitems.AddItems 1, OPCItemIDs, ClientHandles, ItemServerHandles, Errors ''', RequestedDataTypes, AccessPaths
이 함수가 C빌더로 넘어와서 해당 클래스를 보면 ,
아래와 같습니다 .
template <class T> HRESULT __fastcall
OPCItemsDispT<T>::AddItems(long NumItems/*[in]*/, LPSAFEARRAY* ItemIDs/*[in]*/,
LPSAFEARRAY* ClientHandles/*[in]*/, LPSAFEARRAY* ServerHandles/*[out]*/,
LPSAFEARRAY* Errors/*[out]*/, VARIANT RequestedDataTypes/*[in,opt]*/,
VARIANT AccessPaths/*[in,opt]*/)
{
_TDispID _dispid(*this, OLETEXT("AddItems"), DISPID(DISPID_UNKNOWN/*[1610743820]*/));
TAutoArgs<7> _args;
_args[1] = NumItems /*[VT_I4:0]*/;
_args[2] = ItemIDs /*[VT_SAFEARRAY:1]*/;
_args[3] = ClientHandles /*[VT_SAFEARRAY:1]*/;
_args[4] = ServerHandles /*[VT_SAFEARRAY:1]*/;
_args[5] = Errors /*[VT_SAFEARRAY:1]*/;
_args[6] = RequestedDataTypes /*[VT_VARIANT:0]*/;
_args[7] = AccessPaths /*[VT_VARIANT:0]*/;
return OleFunction(_dispid, _args);
}
이 함수에 콜을 할때 인수를 어떻게 넘겨줘야 할지 전혀 모르겠습니다.
OPCMyPVitems->AddItems( 1 , ?? , ?? , ?? , ?? );
뒤에 인수 2개는 option 으로 안줘도 되는데.. SAFEARRAY 형태는 어떻게 변수를 설정해서 넘겨줘야 할지..
도와주세요...
|