全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2281
推到 Plurk!
推到 Facebook!

winsock ocx 收到亂碼 但傳送無誤

答題得分者是:turboted
kirinhuang
一般會員


發表:1
回覆:2
積分:0
註冊:2002-08-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-30 21:28:37 IP:203.204.xxx.xxx 未訂閱
小弟因為專題的關係 題目是做一個類似ICQ的軟體 我是負責server的部份 但是客戶端是由VB開發 (因為同學不會BCB,也不想學) 於是我只好硬上了 把winsock ocx 變成VCL來使用 目前VB to VB 傳送接無誤 但是 VB to BCB方面就有問題 老是收到亂瑪 有問題程式如下 void __fastcall TForm1::Winsock1DataArrival(TObject *Sender, long bytesTotal) { Variant icq_id,aaa; Winsock1->GetData(icq_id); aaa=icq_id; Edit1->Text=VarToStr(aaa); } 也試過 AnsiString(aaa) Sting(aaa) 都收到亂瑪 因為VB那邊是直接傳送字串過來 但是BCB轉換的VCL在GetData裡面要使用void 也不知道是否為 資料型態 問題 但是傳送資料對方接收無誤 不知道還有沒有轉換字串的函數 但也不確定是哪邊有問題,不知道有高手可以幫忙? 另外一問就是 powersock VCL能跟 winsock ocx 溝通?
------
命犯天煞孤星
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-30 22:34:59 IP:61.216.xxx.xxx 未訂閱
我不知道您說的winsock ocx 是什麼 這是標準的東西嗎,也許在VB是吧 不過最基本的是在Winsock.h 裏面叫用的 winsock.dll 和 wsock32.dll winsock 2 有ws3_32.dll ws2_32.lib winsock2.h 我是建議您直接叫用這裏面的function 而不要自己用一些其他的元件 這樣一來,也比較不會發生您現在找不出問題的麻煩
kirinhuang
一般會員


發表:1
回覆:2
積分:0
註冊:2002-08-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-30 22:38:48 IP:203.204.xxx.xxx 未訂閱
多謝大大的解答 不過我的功力只會VCL或是OCX 不太會呼叫DLL SO~ 那請問一下有那位大大可以教一下 void轉換成字串的參數ㄇ 因為好像真的是這個問題ㄝ 命犯天煞孤星
------
命犯天煞孤星
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-31 15:00:35 IP:61.216.xxx.xxx 未訂閱
你把getdata 的source code 投上來看看吧 不然我也不知道你在說啥 如果是回傳void 那又怎麼可能轉成ansistring void 根本就沒東西阿
kirinhuang
一般會員


發表:1
回覆:2
積分:0
註冊:2002-08-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-01 00:13:04 IP:203.204.xxx.xxx 未訂閱
小弟已經解決了 把心得整理一下 下面是VB的說明 因為這個是OCX轉過來的元件 object.GetData data, [type,] [maxLen] data 為自己宣告的變數 單元 描述 object 物件運算式,其值為「適用於」清單中的某個物件。 data 在方法成功地傳回之後,預存擷取的資料。如果沒有足夠的資料用於請求的型態,則 data 將設定成 Empty。 type 選擇性的。擷取的資料型態,詳見「設定值」中所述。 maxLen 選擇性的。在收到位元組陣列或字串時,此長度值指定了所需要的大小。如果沒有指定位元組陣列或字串,則將擷取所有可用的資料。如果提供的資料型態不是位元組陣列和字串的話,則忽略該引數。 type 的設定值是: 描述 常數 Byte vbByte Integer vbInteger Long vbLong Single vbSingle Double vbDouble Currency vbCurrency Date vbDate Boolean vbBoolean SCODE vbError String vbString Byte Array vbArray vbByte 基本上在VB中可以指定收到的型態 也可先把data宣告成你要的形態 但是這個元件轉成VCL後 Winsock1->GetData(tagVariant * data,tagVariant type ,tagVariant maxLen) 而我在GetData()裡面就不知道怎麼宣告了說 因為變數不可宣告成字串型態 只知道說先宣告 Variant 變數 然後 變數="字串" Winsock1->GetData(變數) 這樣才不會收到亂碼 不過希望C強的大大可以教一下怎麼宣告好嗎 因為小弟只會VB,而老師又不喜歡VB 命犯天煞孤星
------
命犯天煞孤星
系統時間:2024-04-26 12:18:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!