Zitat:
Wo du das Array überhaupt mit der AtmoCtrlLib in Verbindung bringst, ist mir aus deinem letzten Quelltext auch nicht klar.
PpixelDataArr: PSafeArray = nil;
Ist global in der AtmoCtrl
Unit definiert.
Delphi-Quellcode:
// *********************************************************************//
// schickt den Inhalt des Buffers an den COM Server der AtmoWinA.exe und hebt die Sperre
// des Buffers auf.
// *********************************************************************//
procedure TAtmoCtrlLib.AtmoSendPixelData;
stdcall;
var
pALVC: IAtmoLiveViewControl;
begin
pALVC := getAtmoLiveViewControl;
if Assigned(PpixelDataArr)
and Assigned(pALVC)
then
begin
SafeArrayUnaccessData(PpixelDataArr);
pALVC.setPixelData(PbitmapInfoArr, PpixelDataArr);
end;
if Assigned(pALVC)
then
begin
if Assigned(PpixelDataArr)
then
begin
SafeArrayDestroy(PpixelDataArr);
PpixelDataArr :=
nil;
end;
if Assigned(PbitmapInfoArr)
then
begin
SafeArrayDestroy(PbitmapInfoArr);
PbitmapInfoArr :=
nil;
end;
pALVC :=
nil;
end;
end;
Delphi-Quellcode:
// *********************************************************************//
//sperrt den Transferbuffer für den aktuellen Thread und liefert einen Zeiger auf den
//Speicherblock zurück.
//Sollte die DLL noch nicht initialisiert oder kein Aufruf von AtmoCreateTransferBuffers
//im voraus erfolgt sein - liefert die Funktion "NULL"!
// *********************************************************************//
function TAtmoCtrlLib.AtmoLockTransferBuffer: Pointer;
stdcall;
var
pixelData: pByte;
begin
if Assigned(PpixelDataArr)
then
SafeArrayAccessData(PpixelDataArr, Pointer(pixelData));
result := pixelData;
end;
gruss