曾多次看到網友提問有關通達信DLL插件接口參數傳遞問題。現結合自己實際編程應用中怎樣解決參數傳遞與大家交流,我的方法不一定好,旨在給出一些方法參考。
上一篇介紹通達信DLL插件編程的基本框架,主要就是把通達信提供的例子中兩個頭文件合并,生成一個新的CPP文件,把舊CPP文件中接口代碼復制進去就OK。我們日常進行DLL函數編寫,實際上只要在生成的PluginTCalcFunc.cpp文件中添加新的功能函數,把新的函數名添加到自編函數g_CalcFuncSets[]數組中排序,然后編譯就可生成新的DLL。
需要添加的功能函數模型如下:(編寫規范提供應用舊例子中,第二個函數簡化)
void TestPlugin2(int DataLen, float* pfOUT, float* pfINa, float* pfINb, float* pfINc)
{
for (int i = 0; i
{
pfOUT[i] = i;

}
}
編寫規范中:函數參數分別是(數據個數,輸出,輸入a,輸入b,輸入c),參數的計算是基于長度為DataLen 的float類型數組。
對于上面函數模型,void是函數返回類型申明;TestPlugin2是自定義的函數名,可依自寫要實現的功能取便于記憶名稱(如MA、EMA、MACD等);DataLen是傳入的參數數據長度,應用中不用處理;pfOUT是輸出,根據功能要求輸出計算結果,在通達信的TN6指標中接收此輸出;pfINa/pfINb/pfINc是三個要傳遞的參數,實際編寫程序中,主要就是處理這三個數據。在通達信TN6指標公式中,用TDXDLL1(1,C,H,L)這樣的形式調用DLL,這里四個參數,括號中第一個參數1,是告知DLL調用哪個函數,C/H/L是依需要傳入的參數,實際參與計算的參數只有這三個;在實際應用中很多時候用到不只三個參數,怎樣解決這個問題?
當把DLL編寫架構搭好后,實際上他已經具有了C語言的全部功能,遠不止就寫一個通達信函數的作用,只是要注意他的規范,過程中的算法等參照C/C++/MFC即可。
在DLL的PluginTCalcFunc.h頭文件中定義全局變量、數組;先寫一個函數傳遞三個參數進來,如三個計算周期, 用三個全局變量保存,再寫一個計算處理的函數,同時也傳進來三個參數,這樣就同時有六個數據參與計算;用全局數組時需要注意數據長度,定義數組時長度盡量大過數據個數,可能浪費內存空間比較多,現在電腦內存大不是問題。另外可以依數據長度開辟一塊新的內存空間,在用完數據后釋放。還可以通過讀取通達信的本地歷史數據以及盤中即時數據,其中包含有COHLVAMO等數據,有了這些數據什么樣的計算處理應該都不是難事,當然需要有一定的編程功底。后慢再慢慢介紹這些數據的讀取。
本篇就不用圖片解釋,未講清楚處歡迎交流。
來源:生活資訊網



評論前必須登錄!
立即登錄 注冊