我用COM撰寫了一個行程外組件作為服務器程式,這個服務器中有個方法PID(引數,輸出),其中“引數”是VARIANT陣列,在PID的實作中,要把“引數”先轉換成普通float陣列,才能使用。不知道這個該怎么轉換?我在網上找的代碼如下,在同一個行程中是可以實作float陣列轉VARIANT陣列,再把VARIANT陣列轉成float陣列,但是行程間就不行了,求大牛指教~~
客戶端側是float陣列先轉成VARIANT陣列:
float para[4] = { 1, 2, 3, 4 };
//double轉VARIANT
VARIANT varArg1;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 4; // 這個是陣列的長度。
psa = SafeArrayCreate(VT_R4, 1, rgsabound); // VT_I4指定4byte的signed int
for (long k = 0; k < (long)4; k++)
{
SafeArrayPutElement(psa, &k, ¶[k]); // 這里是轉換
}
varArg1.vt = VT_ARRAY|VT_R4; // 指定VARIANT的資料型別,整型陣列
varArg1.parray = psa; // 賦值
行程外COM組件服務器是VARIANT陣列轉float陣列:
//VARIANT轉double
float* pValue = NULL;
SAFEARRAY* pArray = varArg1.parray;
SafeArrayAccessData(pArray, (void**)&pValue);
long Low(0), High(0);
SafeArrayGetLBound(pArray, 1, &Low);
SafeArrayGetUBound(pArray, 1, &High);
LONG i;
float u[4];
for (i = Low; i<High - Low + 1; i++)
{
u[i] = pValue[i];
}
uj5u.com熱心網友回復:
應該是用到行程地址了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93009.html
