kostenloser Webspace werbefrei: lima-city


Gegenstück der VCL zur COleSafeArray Klasse der MFC

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    i**************s

    Hallo zusammen,

    ich habe folgendes Problem:

    Eine Methode eines COM- Interface erwartet als Paramater ein VARAINT Array. Bisher habe ich dieser Methode ein Variant Array übergeben das mittels "VarArrayCreate" erzeugt und anschliessen mit Daten gefüllt wurde.
    C/C++ Code:
    int b[2] = {dwBufferSize,0};
    Variant varBuffer = VarArrayCreate(b,1,varByte);
    void* pBuffer = varBuffer.ArrayLock();
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    varBuffer.ArrayUnlock();

    amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
    C/C++ Code:
    int b[2] = {dwBufferSize,0};
    Variant varBuffer = VarArrayCreate(b,1,varByte);
    void* pBuffer = varBuffer.ArrayLock();
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    varBuffer.ArrayUnlock();

    amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
    C/C++ Code:
    int b[2] = {dwBufferSize,0};
    Variant varBuffer = VarArrayCreate(b,1,varByte);
    void* pBuffer = varBuffer.ArrayLock();
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    varBuffer.ArrayUnlock();

    amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);



    Alles schön und gut, funktioniert auch, ABER ich habe ein riesiges Speicherleck von ca. 10MB/Minute.

    Wenn ich die Methode nicht aufrufe, also so:
    C/C++ Code:
    int b[2] = {dwBufferSize,0};
    Variant varBuffer = VarArrayCreate(b,1,varByte);
    void* pBuffer = varBuffer.ArrayLock();
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    varBuffer.ArrayUnlock();

    //amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
    C/C++ Code:
    int b[2] = {dwBufferSize,0};
    Variant varBuffer = VarArrayCreate(b,1,varByte);
    void* pBuffer = varBuffer.ArrayLock();
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    varBuffer.ArrayUnlock();

    //amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);
    C/C++ Code:
    int b[2] = {dwBufferSize,0};
    Variant varBuffer = VarArrayCreate(b,1,varByte);
    void* pBuffer = varBuffer.ArrayLock();
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    varBuffer.ArrayUnlock();

    //amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);



    ist alles i.O. (kein Speicheleck aber auch keine Funktion). Meine Vermutung ist das es wohl an der COM- Komponete liegt, also habe ich den Hersteller kontaktiert. Der sagt bei ihm gibt es keine Probleme und verwiess nur auf seine Codebeispiele die aber mit VC entwickelt wurden. Er meinte auch das es an der Art der Übergabe des Variant Arrays liegen könnte. In den Beispielen verwenden sie die Klasse COleSafeArray. Hier der Code:

    C/C++ Code:



    // Setup our MFC helper class and read frame data from file
    COleSafeArray SafeArray;
    VARIANT varBuffer;
    SafeArray.ResizeOneDim(dwBufferSize);
    SafeArray.AccessData((void**) &pBuffer);
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    SafeArray.UnaccessData();

    // Render video and audio samples retrieved from input file
    varBuffer = SafeArray.Detach();

    amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);

    SafeArray.Attach(varBuffer);
    C/C++ Code:

    // Setup our MFC helper class and read frame data from file
    COleSafeArray SafeArray;
    VARIANT varBuffer;
    SafeArray.ResizeOneDim(dwBufferSize);
    SafeArray.AccessData((void**) &pBuffer);
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    SafeArray.UnaccessData();

    // Render video and audio samples retrieved from input file
    varBuffer = SafeArray.Detach();

    amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);

    SafeArray.Attach(varBuffer);
    C/C++ Code:

    // Setup our MFC helper class and read frame data from file
    COleSafeArray SafeArray;
    VARIANT varBuffer;
    SafeArray.ResizeOneDim(dwBufferSize);
    SafeArray.AccessData((void**) &pBuffer);
    ReadFile(m_hFile, pBuffer, dwBufferSize, &dwReturn, NULL);
    SafeArray.UnaccessData();

    // Render video and audio samples retrieved from input file
    varBuffer = SafeArray.Detach();

    amv->RenderVideoSample(dwFlags, dw64StartTime, dw64StopTime, varBuffer);

    SafeArray.Attach(varBuffer);


    Nun mal blöd gefragt, was mein ihr dazu? Und gibt es ein Gegestück in der VCL zur COleSafeArray Klasse der MFC?

    Danke im voraus


    Beitrag geändert: 11.10.2007 11:13:44 von informatik-virus


    Beitrag geändert: 11.10.2007 11:14:05 von informatik-virus
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!