COCO研究院

 找回密碼
 註冊
搜索
樓主: keymaker

[其他程式語言] NDDE 問題與討論

[複製鏈接]
發表於 16-6-7 18:02 | 顯示全部樓層
kuolung 發表於 16-6-3 22:49
依我的經驗值,一次抓 500檔股票,DDE 是可以的
我目前用 華南 E指發 經 TSTW 轉 1300檔股票給 TS , 感覺上 ...

kuolung大
3.4G的DATA滿多的
請問一下這個您是怎麼規畫的?
Server
Topic_name
Item_name
這會先分組三種資料庫建立起來嗎?
後續記錄時,應該是連結資料庫去匯整
資料庫部份你是建那一種的??
ass還是txt檔??
發表於 16-6-7 23:25 | 顯示全部樓層
kuolung 發表於 16-6-7 20:34
說到 advise 的寫法要注意,程式不能太長,佔用太多cpu時間,不然會有同步的問題,
因為您的程式還沒有處 ...

謝謝kuolung大
續上述分三組記錄這部份及這個問題
所以我現在除了UI上要呈現什麼外
在data上這三組適合用什麼方式建立??
用TXT→INI去抓嗎?
還是建立在ASS上後,在讀取。
上述這些成立了
接下來語法上您有提到不能太長
我聯想到的是
是不是應該用成共用的xxx[] topic = new xxx(){}及xxx[] item = new xxx(){}放在

StartAdvise()
StopAdvise()
client_Advise()
在用try、if 及 for
這上面三組去RUN
後續還要製作一個dispose()
發表於 16-6-8 09:49 | 顯示全部樓層
小弟也來貢獻一下,重點的確是client_Advise沒錯

private void client_Advise(object sender, NDde.Client.DdeAdviseEventArgs args)
{
     int codepage = Encoding.Default.CodePage;
     dic[args.Item].Text = Encoding.GetEncoding(codepage).GetString(args.Data, 0, args.Data.Length);
}


其中dic是一個Dictionary<string,label>,用來存放畫面上的每一個市場價格label
string放的是DDE的代號,例如A50就是SCN1606.SIMEX.Price
這樣的好處是未來新增市場時,只要去dic裡面新增即可
發表於 16-6-8 10:57 | 顯示全部樓層
謝謝kuolung大及ilybydlm大
昨日有重新研究一下去try按鑑button1後先出現圖二訊息後
在跳出連線狀況
連線後,數據其是呈現靜態,非動態。
嘗試在上網查詢相關資料修正,還是有相同訊息出來。。。。。
此部份還需要請兩位大方便的話,
能否多跟你們請益呢。
Image 1.png Image 2.png Image 3.png
寫法如下:
  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;

  6. using System.Text;

  7. using System.Windows.Forms;
  8. using NDde.Client;


  9. namespace TradeDDE
  10. {
  11.     public partial class TDControl : Form
  12.     {
  13.         //private DdeClient client;
  14.         private Hashtable ht_conn;
  15.         private Hashtable ht_connitem;
  16.         //private Hashtable ht_itemvalue;
  17.         public string data = null;
  18.         public TDControl()
  19.         {

  20.             InitializeComponent();
  21.             ht_conn = new Hashtable();
  22.             ht_connitem = new Hashtable();
  23.             // ht_itemvalue = new Hashtable();

  24.             //client = new DdeClient( "","" );
  25.         }
  26.         private void TDControl_Load(object sender, EventArgs e)
  27.         {
  28.         }
  29.         /**新增 DDE連線的事件處理**/
  30.         private void button1_Click(object sender, EventArgs e)
  31.         {
  32.             
  33.             DdeClient client = new DdeClient("MMSDDE", "FUSA");
  34.             if (ht_conn.ContainsKey(client))
  35.             {
  36.                 MessageBox.Show("已連線不能重複登入!");
  37.                 return;
  38.             }

  39.             client.Disconnected += client_Disconnected;
  40.             client.Advise += client_Advise;
  41.             try
  42.             {
  43.             client.Connect();
  44.                 label1.Text = "已連線";
  45.                 string key = "MMSDDE"+"|"+"FUSA";
  46.             ht_conn.Add(key, client);

  47.             }
  48.             catch(Exception thrown)
  49.             {
  50.                 MessageBox.Show("無法連結DDE伺服器:" + thrown.Message);

  51.             }

  52.            
  53.             DdeClient dc = (DdeClient)ht_connitem[client];
  54.             string item = "B1YM&.125";
  55.             this.AddItem(dc, item);
  56.             string abc;
  57.             abc = client.Request(item, 10000);
  58.             client.StartAdvise(item, 1, true, 10000);
  59.             client.Advise += client_Advise;
  60.             decimal lab;
  61.             lab = Convert.ToDecimal(abc);
  62.             lab = decimal.Parse(abc);
  63.             label2.Text = abc;
  64.             int abcd = dataGridView1.Rows.Add(abc);
  65.         }

  66.         private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
  67.         {
  68.             if (e.RowIndex < 0 ||(e.ColumnIndex != dataGridView1.Columns["Col_item"].Index &&  e.ColumnIndex != dataGridView1.Columns["Col_del"].Index))
  69.                 return;
  70.             DataGridViewRow del_row = dataGridView1.Rows[e.RowIndex];
  71.             
  72.             DdeClient client = new DdeClient("MMSDDE", "FUSA");
  73.             DdeClient dc = (DdeClient)ht_connitem[client];
  74.            
  75.             string stop_item = del_row.Cells["Col_item"].Value.ToString();
  76.             
  77.             this.Stop_advise(dc,stop_item);
  78.             string service_topic_item = client + "!" + stop_item;
  79.             DataGridViewRow del_item_row = (DataGridViewRow)ht_connitem[service_topic_item];
  80.             
  81.             ht_connitem.Remove(service_topic_item);
  82.             dataGridView1.Rows.Remove(del_item_row);
  83.             dataGridView1 = null;
  84.             return;


  85.         }
  86.         //Stop Advise
  87.         private void Stop_advise(DdeClient dc, string item)
  88.         {
  89.             try
  90.             {
  91.                 dc.StopAdvise(item, 10000);
  92.             }
  93.             catch (Exception thrown)
  94.             {
  95.                 MessageBox.Show("停止更新: \n" + thrown.Message);
  96.             }
  97.         }
  98.         
  99.         private void Dictionary(string Label)
  100.         {
  101.             Label L = new Label();   
  102.            
  103.         }
  104.         private void client_Advise(object sender, DdeAdviseEventArgs args)
  105.         {
  106.             //Console.WriteLine("OnAdvise:" + args.Text);

  107.             DdeClient dc = (DdeClient)sender;
  108.             string key = dc.Service + "|" + dc.Topic + "!" + args.Item;
  109.             //Item it = new Item();
  110.             //it.item = args.Item; it.value = "";
  111.             //Hashtable ht_connitem = new Hashtable();
  112.             
  113.             DataGridViewRow chg_value_row = (DataGridViewRow)ht_connitem[key];
  114.             chg_value_row = null;
  115.             return ;
  116.             int codepage = Encoding.Default.CodePage;
  117.                 string data = Encoding.GetEncoding(codepage).GetString(args.Data, 0, args.Data.Length);
  118.                
  119.             chg_value_row.Cells["Col_item"].Value = data;
  120.                 label2.Text = data;



  121.         }
  122.         private void AddItem(DdeClient dc, string item)
  123.         {

  124.             try
  125.             {

  126.                 string key = dc.Service + "|" + dc.Topic + "!" + item;
  127.                 Item it = new Item();

  128.                 it.item = item; it.value = "";

  129.                 try
  130.                 {
  131.                     byte[] data = dc.Request(item, 1, 10000);
  132.                     int codepage = Encoding.Default.CodePage;
  133.                     string value = Encoding.GetEncoding(codepage).GetString(data, 0, data.Length);
  134.                     it.value = value;
  135.                 }
  136.                 catch (Exception)
  137.                 {
  138.                     ;
  139.                 }
  140.                 dc.StartAdvise(item, 1, true, 10000);
  141.                 int idx = dataGridView1.Rows.Add(it.value);
  142.                 ht_conn.Add(key, dataGridView1.Rows[idx]);
  143.                 label2.Text = it.value;

  144.             }
  145.             catch (Exception thrown)
  146.             {
  147.                 MessageBox.Show("無法新增項目:\n" + thrown.Message);
  148.             }

  149.         }
  150.         private void Remove_Connect_and_Item_Row(int row_idx)
  151.         {
  152.             DataGridViewRow del_row = dataGridView1.Rows[row_idx];
  153.             string key = del_row.Cells["Col_item"].Value.ToString();
  154.             DdeClient client_conn = (DdeClient)ht_connitem[key];
  155.             ArrayList list = new ArrayList();
  156.             foreach (DictionaryEntry del in ht_connitem)
  157.             {
  158.                 string item_key = del.Key.ToString();
  159.                 string item_key_substr = item_key.Substring(0, item_key.IndexOf("!"));
  160.                 if(key.Equals(item_key_substr))
  161.                 {
  162.                     DataGridViewRow del_item_row = (DataGridViewRow)del.Value;
  163.                     string item = del_item_row.Cells["Col_item"].Value.ToString();
  164.                     this.Stop_advise(client_conn, item);
  165.                     list.Add(item_key);
  166.                 }
  167.             }
  168.             foreach(string str_key in list)
  169.             {
  170.                 DataGridViewRow del_item_row = (DataGridViewRow)ht_connitem[str_key];
  171.                 ht_connitem.Remove(str_key);
  172.                 dataGridView1.Rows.Remove(del_item_row);

  173.             }
  174.             ht_connitem.Remove(key);
  175.             client_conn.Dispose();
  176.             dataGridView1.Rows.RemoveAt(row_idx);

  177.         }
  178.         public void Connect(string service, string topic)
  179.         {
  180.             service = "MMSDDE";
  181.             topic = "FUSA";
  182.             
  183.             DdeClient client = new DdeClient(service, topic);
  184.             client.Disconnected += client_Disconnected;
  185.             client.Advise += client_Advise;
  186.             try
  187.             {
  188.                
  189.                 client.Connect();
  190.                 this.startAdvise(client);
  191.             }
  192.             catch (Exception thrown)
  193.             {
  194.                 throw new Exception("無法連結DDE SERVER \n" + thrown.Message);

  195.             }

  196.         }
  197.         private void startAdvise(DdeClient client)
  198.         {
  199.             //Advise Loop
  200.             client.StartAdvise("B1YM&.125", 1, true, 60000);
  201.             client.Advise += client_Advise;

  202.         }
  203.       
  204.         
  205.       
  206.       

  207.         private void client_Disconnected(object sender, DdeDisconnectedEventArgs args)
  208.         {
  209.             string msg =
  210.                 "OnDisconnected: " +
  211.                 "IsServerInitiated=" + args.IsServerInitiated.ToString() + " " +
  212.                 "IsDisposed=" + args.IsDisposed.ToString();
  213.             //可實做將該訊息顯示在 StatusBar 上.
  214.         }

  215.         private void label1_Click(object sender, EventArgs e)
  216.         {

  217.         }

  218.       
  219.     }
  220. }
複製代碼


發表於 16-6-8 11:56 | 顯示全部樓層
frantz 發表於 16-6-8 10:57
謝謝kuolung大及ilybydlm大
昨日有重新研究一下去try按鑑button1後先出現圖二訊息後
在跳出連線狀況

建議你先從dde最基本的功能寫起,再加入datagridview等功能
只需要宣告DdeClient,連線,宣告client_Advise事件,去測試一個label是否能夠持續跳動


另外給你一個小提醒,建議把DdeClient設為全域變數,不然可能會隨著時間被清掉喔!!!
發表於 16-6-8 12:24 | 顯示全部樓層
ilybydlm 發表於 16-6-8 11:56
建議你先從dde最基本的功能寫起,再加入datagridview等功能
只需要宣告DdeClient,連線,宣告cl ...

謝謝ilydydlm大
目前正在TRY中。。。。
晚點來把DdeClient調整一下位置。。。
感恩~
發表於 16-6-8 12:24 | 顯示全部樓層
ilybydlm 發表於 16-6-8 11:56
建議你先從dde最基本的功能寫起,再加入datagridview等功能
只需要宣告DdeClient,連線,宣告cl ...

目前會先著手重新在寫一次一個個觀察。
發表於 16-6-14 09:57 | 顯示全部樓層
近日重新編寫
try了之後,不曉得是那邊有問題
需要請kuolung大及ilybydlm大協助檢視一下是那裡不對了。我的寫法如下:參考了ilybydlm大的建議:
嘗試套入Dictionary<string, Label> dic = new Dictionary<string, Label>();這個寫法。
但不曉得有沒有寫錯,因為會跳出圖三的訊息。。。。


  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using NDde.Client;
  10. /** 2016/06/09 00:23 今日先學習建立DDEClient→連線→Client_Advise至label可以更新數據。*/
  11. /**1.建立struct.cs //分別建立Service、Topic、Item類別,屬全域宣告*/
  12. namespace VCDDEClient
  13. {
  14.     public partial class CVDDEClient : Form
  15.     {
  16.        Dictionary<string, Label> dic = new Dictionary<string, Label>();
  17.         //IDictionary dic = new Dictionary<string, Label>();

  18.         // public DdeClient client ;
  19.         // public Service service_name;
  20.         // public Topic topic_name;
  21.         // public Item item_name;
  22.         //  public Item item_digital;
  23.         private Hashtable ht_conn;
  24.         

  25.             
  26.             
  27.            


  28.         public CVDDEClient()
  29.         {
  30.             InitializeComponent();
  31.          //   client = new DdeClient("MMSDDE","FUSA");
  32.         //    service_name = new Service();
  33.         //    topic_name = new Topic();
  34.         //    item_name = new Item();
  35.             ht_conn = new Hashtable();

  36.     }
  37.    

  38.         
  39.     private void CVDDEClient_Load(object sender, EventArgs e)
  40.         {
  41.             string[] ewords = new string[] { "B1YM&.125", };
  42.             Label[] cwords = new Label[] { label2, };
  43.             for (int i = 0; i < cwords.Length; i++)
  44.             {
  45.                 dic.Add(ewords[i], cwords[i]);
  46.             }
  47.             //   dic.Add("B1YM&.125", label2);
  48.             // try
  49.             //    {
  50.             //    dic.Add("B1YM&.125", label2);
  51.             //     }
  52.             // catch (KeyNotFoundException ex)
  53.             // {
  54.             // Console.WriteLine("沒有找到鍵引發異常:" + ex.Message);
  55.             //  }
  56.         }

  57.         /**------------------------我是分格線---------------------
  58.          *  新增DDE連線事件處理
  59.          */
  60.         private void btn1_Click(object sender, EventArgs e)
  61.          {

  62.            
  63.             //if (btn1_Click != new EventHandler(btn1_Click) )
  64.             //  if(ht_conn.ContainsKey(client))
  65.             if (ht_conn.ContainsKey("MMSDDE"+"|"+"FUSA"))
  66.             {
  67.                 MessageBox.Show("不能重複連線");
  68.                 return;
  69.             }
  70.             DdeClient dc = new DdeClient("MMSDDE", "FUSA");
  71.             dc.Disconnected += client_Disconnected;
  72.             dc.Advise += client_Advise;
  73.             try
  74.             {
  75.                 dc.Connect();
  76.                 label1.Text = "已連線";

  77.                 string item = "B1YM&.125";
  78.                 string runkey = "MMSDDE" + "|" + "FUSA" + "!" + item;
  79.                 ht_conn.Add(runkey, dc);
  80.                
  81.                 DdeClient key = (DdeClient)ht_conn[dc];
  82.                 Item it = new Item();
  83.                 it.item = item; it.value = "";
  84.                 try
  85.                 {
  86.                     byte[] data = dc.Request(item, 1, 10000);
  87.                     int codepage = Encoding.Default.CodePage;
  88.                     string value = Encoding.GetEncoding(codepage).GetString(data, 0, data.Length);
  89.                     it.value = value;

  90.                 }
  91.                 catch (Exception)
  92.                 {
  93.                     ;
  94.                 }
  95.                 dc.StartAdvise(item, 1, true, 10000);
  96.                 label2.Text = it.value;

  97.             }
  98.             catch(Exception thrown)
  99.             {
  100.                 MessageBox.Show("無線連結DDE伺服器:" + thrown.Message);
  101.             }


  102.             //dic.Add("B1YM&.125", label2);
  103.             string[] ewords = new string[] { "B1YM&.125", };
  104.             Label[] cwords = new Label[] { label2, };
  105.             for (int i = 0; i < cwords.Length; i++)
  106.             {
  107.                 dic.Add(ewords[i], cwords[i]);
  108.             }

  109.         }


  110.         //Stop Advise
  111.         private void Stop_advise(DdeClient dc, string item)
  112.         {
  113.             try
  114.             {
  115.                 dc.StopAdvise(item, 10000);
  116.             }
  117.             catch (Exception thrown)
  118.             {
  119.                 MessageBox.Show("Can not Stop Advise: \n" + thrown.Message);
  120.             }
  121.         }
  122.         

  123.         /**★★★★★--------設計的重點------------★★★★★
  124.          * 建立client_Advise
  125.          */
  126.         private void client_Advise(object sender , DdeAdviseEventArgs args)
  127.         {
  128.             //DdeClient dc = (DdeClient)sender;
  129.             //string key = dc.Service + "|" + dc.Topic + "!" + args.Item;
  130.          //   DdeClient dc = (DdeClient)sender;
  131.          //   string key = "MMSDDE" + "|" + "FUSA" + "!" + args.Item;
  132.         //    DdeClient label = (DdeClient)ht_conn[key];
  133.             int codepage = Encoding.Default.CodePage;
  134.             //string data = Encoding.GetEncoding(codepage).GetString(args.Data, 0, args.Data.Length);
  135.             
  136.             dic[args.Item].Text = Encoding.GetEncoding(codepage).GetString(args.Data, 0, args.Data.Length);



  137.         }
  138.         private void client_Disconnected(object sender, DdeDisconnectedEventArgs args)
  139.         {
  140.             string msg=
  141.                 "OnDisconnected: " +
  142.                 "IsServerInitiated=" + args.IsServerInitiated.ToString() + " " +
  143.                 "IsDisposed=" + args.IsDisposed.ToString();
  144.             //可實做將該訊息顯示在 StatusBar 上.
  145.         }

  146.       
  147.     }
  148. }
複製代碼

Image 1.png Image 2.png Image 3.png



發表於 16-6-14 12:02 | 顯示全部樓層
frantz 發表於 16-6-14 09:57
近日重新編寫
try了之後,不曉得是那邊有問題
需要請kuolung大及ilybydlm大協助檢視一下是那裡不對了。我的 ...

1.試著把btn1_Click的東西寫到CVDDEClient_Load裡面,換言之就是打開winform就直接執行

2.如果上述方法依舊不成功,先試著把Dictionary拿掉,Advise直接控制winform上面的label.Text試試看!
發表於 16-6-14 14:27 | 顯示全部樓層
ilybydlm 發表於 16-6-14 12:02
1.試著把btn1_Click的東西寫到CVDDEClient_Load裡面,換言之就是打開winform就直接執行

2.如果上述方法 ...

謝謝ilybydlm大
我在試看看。
發表於 16-6-16 18:09 | 顯示全部樓層
本帖最後由 frantz 於 16-6-16 18:21 編輯
kuolung 發表於 16-6-15 00:13
剛剛,我用 YESWIN 測,是 OK 的,
您先把 154 註解掉,改用 151收 advise

謝謝kuolunh大
我目前正在想辦法
嘗試用了
Form.CheckForIllegalCrossThreadCalls = False
這方式可行的,但不清楚會有什麼問題發生。
現在正在研究要不要用↓這兩種方式去排除問題。
1.BackgroundWorker
2.建立委派(Delegate)

發表於 16-6-17 09:38 | 顯示全部樓層
先貼一個"最精簡"可以讓LABEL跳動的程式碼上來看看

不然可能發生的問題太多了,無法找出真正原因
發表於 16-6-17 16:02 | 顯示全部樓層
kuolung 發表於 16-6-17 00:22
不太了解 你的問題耶  明明 advise 已經收到 event
為什麼還要用 你說的 1 2  來解決 ...

Kuolung大不知道是不是因為作業系統的關係
我用win10環境下使用vs2015去寫的。
除了使用啟用但不偵錯,或者寫那一串才不會發生問題。
要不然在try時,就是會跳出那個訊息(只要有跳動數據時,就會發生)
從上面的訊號去google查一下,就是嘗試用1或2去排除這樣的問題發生。


發表於 16-6-17 16:13 | 顯示全部樓層
ilybydlm 發表於 16-6-17 09:38
先貼一個"最精簡"可以讓LABEL跳動的程式碼上來看看

不然可能發生的問題太多了,無法找出真正原因


ilybydlm大
以下是測試的程式碼。。 。
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;

  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using NDde.Client;
  10. /** 2016/06/09 00:23 今日先學習建立DDEClient→連線→Client_Advise至label可以更新數據。*/
  11. /**1.建立struct.cs //分別建立Service、Topic、Item類別,屬全域宣告*/
  12. namespace VCDDEClient
  13. {
  14.     public partial class CVDDEClient : Form
  15.     {
  16.         DdeClient dc = new DdeClient("MMSDDE", "FUSA");
  17.         string item = "B1YM&.125";

  18.         private Hashtable ht_conn;
  19.         public CVDDEClient()
  20.         {
  21.             InitializeComponent();
  22.             ht_conn = new Hashtable();

  23.     }
  24.    

  25.         
  26.     private void CVDDEClient_Load(object sender, EventArgs e)
  27.         {
  28.         }

  29.         /**------------------------我是分格線---------------------
  30.          *  新增DDE連線事件處理
  31.          */
  32.         private void btn1_Click(object sender, EventArgs e)
  33.          {
  34.            
  35.             if (ht_conn.ContainsKey("MMSDDE"+"|"+"FUSA"))
  36.             {
  37.                 MessageBox.Show("不能重複連線");
  38.                 return;
  39.             }
  40.             dc.Disconnected += client_Disconnected;
  41.             dc.Advise += client_Advise;
  42.             try
  43.             {
  44.                 dc.Connect();
  45.                 label1.Text = "已連線";

  46.                 string runkey = "MMSDDE" + "|" + "FUSA" + "!" + item;
  47.                 ht_conn.Add(runkey, dc);
  48.                
  49.                 DdeClient key = (DdeClient)ht_conn[dc];
  50.                 Item it = new Item();
  51.                 it.item = item; it.value = "";
  52.                 try
  53.                 {
  54.                     byte[] data = dc.Request(item, 1, 10000);
  55.                     int codepage = Encoding.Default.CodePage;
  56.                     string value = Encoding.GetEncoding(codepage).GetString(data, 0, data.Length);
  57.                     it.value = value;
  58.                 label2.Text = it.value;
  59.                 }
  60.                 catch (Exception)
  61.                 {
  62.                     ;
  63.                 }
  64.                 dc.StartAdvise(item, 1, true, 10000);
  65.                

  66.             }
  67.             catch(Exception thrown)
  68.             {
  69.                 MessageBox.Show("無線連結DDE伺服器:" + thrown.Message);
  70.             }

  71.         }

  72.       

  73.         /**★★★★★--------設計的重點------------★★★★★
  74. private void client_Advise(object sender, DdeAdviseEventArgs args)
  75.         {
  76.                 int codepage = Encoding.Default.CodePage;
  77.                 label2.Text = Encoding.GetEncoding(codepage).GetString(args.Data, 0, args.Data.Length);
  78.         }   
  79. private void client_Disconnected(object sender, DdeDisconnectedEventArgs args)
  80.         {
  81.             string msg =
  82.                 "OnDisconnected: " +
  83.                 "IsServerInitiated=" + args.IsServerInitiated.ToString() + " " +
  84.                 "IsDisposed=" + args.IsDisposed.ToString();
  85.             //可實做將該訊息顯示在 StatusBar 上.
  86.         }
複製代碼


發表於 16-6-17 18:26 | 顯示全部樓層
kuolung 發表於 16-6-17 17:13
我也是用 win 10 (企業版) + vs 2015 (Enterprise) 都是用 64bit 版的,
也沒有您說的問題  ??

我是用vs 2015(community)。。。。
我沒有元大的,
我用日盛的鉅富贏家測試的。。。。


您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-25 01:04

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |