Portowanie ActiveX na Delphi

0

Mam problem z użyciem ActiveX pod Delphi.. wydaje się nie eksportować klas niezbędnych do utworzenia ole.. przykładowo metoda GetDvrCameraInfo przyjmująca parametr OLE VARIANT w rzeczywistości potrzebuje obiektu ole z tablicą DVR_CAMERA_INFO.. jak go utworzyć?

CPP:

    HRESULT GetDvrCameraInfo(VARIANT varCameraInfo);

DELPHI:

    function GetDvrProductInfo(varProductInfo: OleVariant): SYSUINT;

Przykład z dokumentacji:

[VC++]
VARIANT		            varCameraInfo;
RnDvrDataTypes::DVR_CAMERA_INFO data[16];
VariantInit(&varCameraInfo);
	
varCameraInfo.vt    = VT_BYREF|VT_UI1;
varCameraInfo.pbVal = (BYTE *)&data;

GetDvrCameraInfo(varCameraInfo);

gdzie:

	typedef struct _DVR_CAMERA_INFO
	{
		CHAR		szCameraTitle[42];
		BOOL		bPTZEnable;
		BOOL		bSignalLoss;
		BOOL		bConnect;
		BOOL		bPelcoUsed;
		BOOL		bConnectIPCam;
		BOOL		bPTZEnableIPCam;
	} DVR_CAMERA_INFO;
0

Zagadka rozwiązana.. dokumentacja jest g* warta.
Opisana zła struktura wejściowa przez co pamięć była przesunięta.
Odpowiednikiem OleVariant w delphi w tym wypadku jest: TVariantArg.
Samo odpowiednie deklarowanie obiektu ole i odbiór danych w ciągu bajtów + przepisanie danych do rekordu poniżej (przyda się dla potomnych).

var
  iRes: Cardinal;
  oOleObject: TVariantArg;
  varBuffer: OleVariant;  
  oOleData: PByteArray;
begin
    GetMem(oOleData, SizeOf(STATUS_INFO_SETUP_DATA));
    ZeroMemory(oOleData, SizeOf(STATUS_INFO_SETUP_DATA));

    oOleObject.vt := VT_UI1 or VT_BYREF;
    oOleObject.pbVal := Pointer(oOleData);

    varBuffer  := OleVariant(oOleObject);

    iRes := FDvr.GetDvrProductInfo(varBuffer);

    if (iRes = ERR_SUCCESSED) then begin
      CopyMemory(@oData, oOleData, SizeOf(oData));
0

Jeszcze tylko dopisz jaka to biblioteka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1