Portowanie ActiveX na Delphi

Portowanie ActiveX na Delphi
zajcev
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 8 lat
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:

Kopiuj
    HRESULT GetDvrCameraInfo(VARIANT varCameraInfo);

DELPHI:

Kopiuj
    function GetDvrProductInfo(varProductInfo: OleVariant): SYSUINT;

Przykład z dokumentacji:

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

GetDvrCameraInfo(varCameraInfo);

gdzie:

Kopiuj
	typedef struct _DVR_CAMERA_INFO
	{
		CHAR		szCameraTitle[42];
		BOOL		bPTZEnable;
		BOOL		bSignalLoss;
		BOOL		bConnect;
		BOOL		bPelcoUsed;
		BOOL		bConnectIPCam;
		BOOL		bPTZEnableIPCam;
	} DVR_CAMERA_INFO;
edytowany 1x, ostatnio: flowCRANE
zajcev
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 8 lat
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).

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.