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

請問以下VB的程式碼如何轉換成c++

尚未結案
schwantz
一般會員


發表:4
回覆:4
積分:1
註冊:2005-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-01 01:17:31 IP:220.133.xxx.xxx 訂閱
該vb使用了OCX元件,在VB 的範例裡call PlaceOrder 的function時須要傳入 Variant 的array ,呼叫後傳回值正常
但我試著用c builder 來改寫卻得不到正常的的回應,請高手幫忙,感恩!!
[code vb]
Dim Data As Variant
Dim varData() As Variant

ReDim varData(0 To 27)
varData(0) = "A123456789"
varData(1) = "1234567"
varData(2) = "A"
varData(3) = "1"
varData(4) = ""
varData(5) = "IC"
varData(6) = "B"
varData(7) = "FFFF"
varData(8) = 12
varData(9) = "0"
varData(10) = 6000000
varData(11) = 1
varData(12) ="R"
varData(13) = 9000

Data = varData
tmp = ICEGLOBALTRADEAPI1.PlaceOrder(Data)

[/code]
請問以上程式碼要轉成C builder要如何改寫

c builder header
long __fastcall PlaceOrder(VARIANT* pvData);

以下是本人曾寫過的程式碼,卻行不通
[code cpp]
int tmp;
VARIANT varData[28];
BSTR tbstr;


tbstr=SysAllocString("A123456789");
varData[0].vt= VT_BSTR;
varData[0].bstrVal = tbstr;
varData[1].vt= VT_BSTR;
tbstr=SysAllocString("1234567");
varData[1].bstrVal = tbstr;
//........................程式碼有點長不再贅述
tmp = ICEGLOBALTRADEAPI1->PlaceFutOrder(varData);
也曾試過SafeArrayCreate,SafeArrayPutElement也還是不行
[/code]
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-01 20:33:06 IP:61.60.xxx.xxx 訂閱
請參考以下的範例程式碼,再自行修改

[code cpp]
USES_CONVERSION;
SAFEARRAY *pSA=NULL;
SAFEARRAYBOUND aDim[1];
aDim[0].lLbound=0;
aDim[0].cElements=3; // 看有多少個 Elements,自行調整
long i=0;

pSA=SafeArrayCreate(VT_VARIANT, 1, aDim);
if(pSA!=NULL)
{
TVariant vOut;
i=0;
vOut=A2W("111");
SafeArrayPutElement(pSA, &i, &vOut);
i=1;
vOut=A2W("222");
SafeArrayPutElement(pSA, &i, &vOut);
i=2;
vOut=A2W("333");
SafeArrayPutElement(pSA, &i, &vOut);
}
// 呼叫 ActiveX 的 function,並把 pSA 參數代入
// 略...

[/code]
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-01 23:50:37 IP:60.248.xxx.xxx 訂閱
試著把
tbstr=SysAllocString("A123456789");
改成tbstr=SysAllocString(L"A123456789");
tbstr=SysAllocString("1234567");
改成tbstr=SysAllocString(L"1234567");

因為在win32的系統裡SysAllocString裡面要放的是unicode的字串!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-13 01:02:01 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-03-29 3:13:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!