[VB6 ] VB在呼叫dll檔案時會自動關閉

看板Visual_Basic作者 (河豚)時間9年前 (2015/01/28 20:54), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串1/1
我今天在嘗試以VB6來呼叫dll檔時,遇到兩種情形 上網查了之後,還是不太知道怎麼解決="= 前情提要: 我寫了一個Fortran檔,用Program開頭,轉成dll檔之後進入的端口是MAIN_ (我也有改寫成Subroutine過,兩者結果會一樣,所以不是轉檔出問題) 程式內容大略為 Program 宣告變數 Open檔案,讀取設定值 Open檔案,用來輸出答案 利用設定值進行模擬運算(很複雜的矩陣跟迴圈運算) 收斂之後將結果輸出 End Program 此時,我利用VB呼叫dll檔近來,程式碼為 Private Declare Sub MAIN_ Lib "BaseCase.dll" () Private Sub Command1_Click() Call MAIN_ End Sub 此時遇到了第一個問題,程式正確的被執行了,而且我確定其結果有收斂 因為我在收斂之後會輸出答案,而Output file的數據停在答案的一半不到 換個方向講就是,程式跑完之後,不知道什麼原因,答案的Write只執行到一半 程式就被關閉了(不管是在編譯器內或者輸出成EXE檔,他都會自動關閉 我本來有想說會不會是因為我的輸出數據過多,因此我就嘗試寫了另一個新的檔案 讓他輸出整數1到50000,結果沒問題(若要輸出1到50萬,則會顯示堆疊空間不足) 因此我想說是不是因為我把太多數據都寫到同一個TXT檔內,才會導致程式自動關閉? (他這部分就沒有顯示任何訊息,突然就關閉了) 接著,我將Output的資料分開寫,寫到兩個不同的file內,此時軟體可以正常的執行 然後將所有數據都輸出 (因為我在最後有叫他輸出一個計算時間,因此我可以確定全部都有輸出 But,第二個問題出現了,我一樣用上面的那些程式碼執行 在我按第一次執行的時候,他可以得到正確的答案 但是當我再按一次時,程式又會直接關閉 (但是有執行,依照輸出結果來看,是跑到一半就停掉了) 我此時檢查output檔案,可以發現我的兩個output檔 有其中一個有被改寫,另一個則是原封不動,這表示我的程式在邊模擬邊輸出時當掉了 (這部分我是懷疑說是不是因為我的Fortran內的Open指令設定為 OPEN(UNIT=8,FILE="INPUT_DATA_FILE.TXT") OPEN(UNIT=9,FILE="OUTPUT_DATA_FILE.TXT") 沒有給status所導致,但是我依舊無法理解說,為什麼程式會執行到一半自動關閉? 還有,為什麼我的程式明明已經順利模擬完了,卻會在輸出時寫到一半就關掉了? 我是有想到說利用下面這種方法,直接呼叫我的執行檔,這樣的話就可以無限次點取了 (每次模擬都等於呼叫一次執行檔,因此各自獨立不影響) Private Sub Command1_Click() Shell ("cmd /C BaseCase.exe") End Sub 但我還是希望用成dll檔的形式,這樣未來在使用上也會比較方便 希望有好心的鄉民們教小弟如何避免上述情形 應該如何讓每次的call dll都獨立而不互相影響呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.23.91 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1422449649.A.1AF.html

01/29 01:38, , 1F
DLL檔的問題可能比較大
01/29 01:38, 1F

01/29 09:39, , 2F
寫dll不妨retuen訊息,這樣才能瞭解是否正常執行,出錯
01/29 09:39, 2F

01/29 09:39, , 3F
時也可知道問題發生在哪,小弟引用廠商提供的dll大多會
01/29 09:39, 3F

01/29 09:39, , 4F
這樣寫,也比較有利於廠商除錯
01/29 09:39, 4F
文章代碼(AID): #1KoDln6l (Visual_Basic)
文章代碼(AID): #1KoDln6l (Visual_Basic)