線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1012
推到 Plurk!
推到 Facebook!

有關Array之一問

尚未結案
kelvin00929
一般會員


發表:6
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-17 21:23:58 IP:220.228.xxx.xxx 未訂閱
請問各位大大, 我在BCB當中有import一外部OCX, 他其中有一method的傳回值為float 型態的array, 我試過的方式如下: float Array[10]; float *Data; Data=&Array[0]; *Data=Method[10]; //Method[10] is one method of OCX, 10 is number of array. 可是好像不行,Array[10]裡面的值好像並沒有接收到此Method所傳回來的值, 我用一行一行執行的方式發現, Array[10]裡的值都沒有改變過, 而且Array[10]原始值很怪,EX:1.596844131845485E-44 請問我要如何去承接此Method所傳回來的Array呢? 是否可以用OleVariant呢(不清楚是否可用)? 如可以,可否指點迷津, 謝謝。
nickcai2002
一般會員


發表:3
回覆:20
積分:24
註冊:2004-11-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-18 11:47:18 IP:202.39.xxx.xxx 未訂閱
你宣告的陣列不夠大 float Array[10]; 只有0~9的空間, 如果一定要有Array[10]; 就宣告 float Array[11];
kelvin00929
一般會員


發表:6
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-18 13:57:56 IP:211.75.xxx.xxx 未訂閱
引言: 你宣告的陣列不夠大 float Array[10]; 只有0~9的空間, 如果一定要有Array[10]; 就宣告 float Array[11];
nickcai2002您好, 上述所寫的code只是示意而已, 我的問題是在於 用何種方式去接收此Method所傳回來的Array呢? 因為此Method會傳來一陣列值, 但是我有試過讓此Method傳回一個值而已, 並用一float型態的物間去接收, 但還是接不起來, 如: float Array; //此時Array值可能為1.956265444524E-39 Array=Method[1]; ShowMessage(Array); //Array 還是為 1.956265444524E-39
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-18 17:41:10 IP:210.243.xxx.xxx 未訂閱
不是很看的懂你在說什麼? 如果是像下面的code,並不會有什麼問題啊...
flaot Method[10];
for (int i=0; i<10;   i)
{
    Method[i] = i;
}
float Array = Method[1];
ShowMessage(Array);
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-18 17:44:34 IP:211.76.xxx.xxx 未訂閱
kelvin00929你好:     我記得Variant可以做到。另外印象中也有聽過dynamic STL(不過我不懂...)     另外,你沒提的OCX傳float array的資料型是什麼。是float*嗎?大部分我看到傳array都是用Variant。很少用Pointer就傳過去(BSTR不算的話...)。        COM寫法我比較熟一些,不過OCX就很少用到。如果對OCX的看法有誤,也煩請版上前輩們指正了。
kelvin00929
一般會員


發表:6
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-19 10:58:20 IP:220.228.xxx.xxx 未訂閱
引言: kelvin00929你好: 我記得Variant可以做到。另外印象中也有聽過dynamic STL(不過我不懂...) 另外,你沒提的OCX傳float array的資料型是什麼。是float*嗎?大部分我看到傳array都是用Variant。很少用Pointer就傳過去(BSTR不算的話...)。 COM寫法我比較熟一些,不過OCX就很少用到。如果對OCX的看法有誤,也煩請版上前輩們指正了。 < face="Verdana, Arial, Helvetica"> Sorry!我表達的不是很清楚, 這麼說好了, 我想用BCB寫一程式控制一部機器, 此部機器有提供OCX可讓我import進來, 我就是透過此OCX與此部機器作溝通與操作, 而其OCX中有一個Method, 其傳回值為一維或二維陣列,型態為float, 我不知道要用怎樣的方式去接這個Method所傳回來的陣列, 並且可以一個一個去處理陣列裡的值, 以上 就是我問題, pwipwi大大你好, 就我所查到的資料,Variant好像在處理的速度好像會比 其他的一般變數來的慢,如:int, float,.... 是不是這樣呢? 如果是這樣,有沒有其他type別可以用呢?非Variant不可嗎? 因為我的作業需要,處理速度也必須考慮, 謝謝各位大大。
nickcai2002
一般會員


發表:3
回覆:20
積分:24
註冊:2004-11-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-19 11:43:18 IP:202.39.xxx.xxx 未訂閱
可不可以把那個Method的宣告貼上來.
kelvin00929
一般會員


發表:6
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-19 11:51:39 IP:61.220.xxx.xxx 未訂閱
引言: 可不可以把那個Method的宣告貼上來.
] Sorry, 我無法看到此Method的宣告。
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-19 13:19:40 IP:211.76.xxx.xxx 未訂閱
關於Variant..使用的目的是能傳各種型別的資料, 效率可能就沒法子令人滿意了。 然而,我想重點或許在OCX的Method型態... 如果這方面無法得知,可能就要問比較熟OCX的人了 話說回來,很少看到有人把library寫成OCX的... 有什麼特殊用處嗎?(還是我少見多怪?)
kelvin00929
一般會員


發表:6
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-19 14:38:07 IP:211.75.xxx.xxx 未訂閱
引言: 關於Variant..使用的目的是能傳各種型別的資料, 效率可能就沒法子令人滿意了。 然而,我想重點或許在OCX的Method型態... 如果這方面無法得知,可能就要問比較熟OCX的人了 話說回來,很少看到有人把library寫成OCX的... 有什麼特殊用處嗎?(還是我少見多怪?)
可能是因為這個OCX,原廠希望可以同時供VB與C 去呼叫, 所以寫成OCX, 對了,原廠有提供VC 的code: //------\/--------VC code---- COleVariant waveform; waveform.Attach(dso.GetScaledWaveform("C1", // trace name 500, // numPoints 0); // transfer first array //-----/\---------------- 其中dso.GetScaledWaveform("C1", 500,0) 就是我說的Method,此Method會傳回1*500的一維陣列, 但我不太懂VC 的語法, waveform.Attach(),在VC 是否可接收陣列值?
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-19 18:15:45 IP:211.76.xxx.xxx 未訂閱
看起來是回傳了一個Variant。    在BCB你可以試試    
 
Variant array;
array = dso.GetScaledWaveform("C1", // trace name
500, // numPoints 
0);     float f1 = array.GetElement(1);
float f2 = array.GetElement(2);    
試試看能不能作用。
kelvin00929
一般會員


發表:6
回覆:6
積分:2
註冊:2004-04-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-11-20 18:18:15 IP:192.72.xxx.xxx 未訂閱
引言: 看起來是回傳了一個Variant。 在BCB你可以試試
 
Variant array;
array = dso.GetScaledWaveform("C1", // trace name
500, // numPoints 
0);     float f1 = array.GetElement(1);
float f2 = array.GetElement(2);    
試試看能不能作用。
可以了,謝謝pwipwi大大, 也謝謝其他大大的熱心幫忙。
系統時間:2024-07-09 7:11:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!