收到一個PSafeArray型別的回傳值,不知道如何讀里面的內容!!
function TEngine.RoiCoordArrayGet(const bstrRoi: WideString; out psanCoordsX: PSafeArray;
out psanCoordsY: PSafeArray): I_ENG_ERROR;
begin
Result := DefaultInterface.RoiCoordArrayGet(bstrRoi, psanCoordsX, psanCoordsY);
end;
procedure TForm1.Button12Click(Sender: TObject);
var
CoordsX, CoordsY :PSafeArray;
XCor, YCor:Double;
begin
//獲取ROI坐標值
iReturn := Engine1.RoiCoordArrayGet('定位器1', CoordsX, CoordsY);
XCor := CoordsX.??; //??? 不知道如何獲取CoordsX和CoordsY中的資料內容??
YCor := CoordsY.??; //???
if iReturn = I_OK then
showmessage('RoiCoordArrayGet OK!');
end;
uj5u.com熱心網友回復:
頂起!
uj5u.com熱心網友回復:
function TEngine.RoiCoordArrayGet(const bstrRoi: WideString; out psanCoordsX: PSafeArray;out psanCoordsY: PSafeArray): I_ENG_ERROR;
這個代碼是c++ builder?
按字面的意思: PSafeArray應該是一個指標結構體,你應該是先找到它的定義字典即是record的宣告
呼叫的格式如果默認的情況下應該是是:XCor := CoordsX^.對應的結構體元素
uj5u.com熱心網友回復:
pSafeArray是一個結構體,相關定義如下:PSafeArray = ^TSafeArray;
tagSAFEARRAY = record
cDims: Word; // 陣列的維數
fFeatures: Word; // 用來描述陣列如何分配和如何被釋放的標志
cbElements: Longint; // 陣列元素的大小
cLocks: Longint; // 一個計數器,用來跟蹤該陣列被鎖定的次數
pvData: Pointer; // 指向資料緩沖的指標
rgsabound: array[0..0] of TSafeArrayBound; // 描述陣列每維的陣列結構,該陣列的大小是可變的
end;
SAFEARRAY的主要目的是用于automation中的陣列型引數的傳遞。
三層架構中通常需要將使用的ClientDataSet資料集傳出,那么就可以將DataSet轉換為SafeArray,再由其他模塊轉換接收。
uj5u.com熱心網友回復:
CreateDbClientObject(CLSID_DSBase, IDSBase, FDSBase);SafeArrayCheck(ActiveX.SafeArrayCopy(VarToDataPacket(Delta), DataPacket));
//SafeArrayCheck();
Check(FDSBase,FDSBase.AppendData(DataPacket, True));
FDSBase.SetProp(dspropXML_STREAMMODE, xmlON);
Check(FDSBase,FDSBase.StreamDS(DataPacket));
DataPacketToVariant(DataPacket, VarPacket);
Result := VariantArrayToString(VarPacket);
網上的代碼;
關鍵我現在 把detla轉成 PSafeArray;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/70435.html
標籤:語言基礎/算法/系統設計
