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

呼叫 DLL 的函數後, 出現錯誤訊息

尚未結案
longhair_pan
一般會員


發表:5
回覆:4
積分:1
註冊:2004-09-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-06 23:32:48 IP:220.135.xxx.xxx 未訂閱
各位大大好! 我是 BCB 的新手, 遇到一個問題, 我引用廠商的 DLL , #include "header1.h" 後 呼叫一個函數 Config1(0,0,0,0); 四個引數用 0 是廠商手冊內說明的用法, 執行後會出現 Hardware Settings 的視窗, 做一些 device 的組態設定, 當我設定完之後, 按下 ok , 這個指令會去修改一個 ini 檔, 將我的組態寫入, 這些都是在 dll 裡寫好的功能, 就在我按下 ok 之後, 會出現以下的錯誤訊息, Access violation at address 00000000. Read of address 00000000. 因為這個 DLL 也有 .bas 的模組, 我在 VB 內試過就沒這種問題.... 所以應該不是廠商提供的東西有錯.... 請問有人可以幫幫我嗎? 萬分感激。
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-07 21:59:22 IP:210.64.xxx.xxx 未訂閱
引言: 各位大大好! 我是 BCB 的新手, 遇到一個問題, 我引用廠商的 DLL , #include "header1.h" 後 呼叫一個函數 Config1(0,0,0,0); 四個引數用 0 是廠商手冊內說明的用法, 執行後會出現 Hardware Settings 的視窗, 做一些 device 的組態設定, 當我設定完之後, 按下 ok , 這個指令會去修改一個 ini 檔, 將我的組態寫入, 這些都是在 dll 裡寫好的功能, 就在我按下 ok 之後, 會出現以下的錯誤訊息, Access violation at address 00000000. Read of address 00000000. 因為這個 DLL 也有 .bas 的模組, 我在 VB 內試過就沒這種問題.... 所以應該不是廠商提供的東西有錯.... 請問有人可以幫幫我嗎? 萬分感激。
longhair_pan你好: 感覺有可能是基本宣告上的問題! 不知道你是怎麼宣告這個 >!
longhair_pan
一般會員


發表:5
回覆:4
積分:1
註冊:2004-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-07 22:02:57 IP:220.135.xxx.xxx 未訂閱
非常感謝您的答覆, 那個 function 我發信去問過原廠,  他們都說經過多次測試也沒有問題 還有我也有 import 一個 .lib 檔.... bcb 可以 include 的 header 跟 lib 都有附 我也都有引用了.... 可是就是不行....
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-08 02:36:16 IP:219.68.xxx.xxx 未訂閱
longhair_pan您好..我以前曾經寫過DLL..有遇到過一次小問題..跟您的狀況有點像.. 希望能給您一個方向.. 在DLL中..如果寫一個FUNCTION EXPORT給外部程式..但是那個函數卻沒有寫傳回值.. 您的程式去CALL他..就會發生錯誤.. 就如同您的狀況一樣..程式都會過..功能都成功.. 但是就是在處理完要返回您的應用程式時出問題.. 而且很怪異..在VB就是不會出問題..在DELPHI BCB就是會出問題.. 後來找到的原因就是原始的DLL中的FUNCTION傳值與否..必須很嚴謹.. 傳返回位址給應用程式時..才不會參考到無效位址(沒有設定傳回值..傳回應用程式的是未知的記憶體空間).. 照您說的..呼叫一個函數 Config1(0,0,0,0) <--請問他有傳值嗎..還是VOID?? 如果是如上面所說..那就是他們的DLL寫的有問題..    另外一個可能出錯的原因大概就是對於參數型態的傳遞方式有錯.. 雖然都是傳0..但是是BYTE..INT..亦或是LONG..也會影響到程式的正確執行 所以您可能要檢查看看宣告那個DLL的參數型態是否有錯! 您可以依以上兩個方向去看看..試哪裡出了問題 > =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就 發表人 -
longhair_pan
一般會員


發表:5
回覆:4
積分:1
註冊:2004-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-09 11:48:00 IP:210.68.xxx.xxx 未訂閱
geniustom 您好, 謝謝您的答覆,以下是關於 config1 這個 function 的說明    宣告部份: void Config1(int para1, int para2, int para3, int para4) Return value: This function does not have a return value. 說明其中一段:   If you call this function passing it 4 zeros [Config1(0,0,0,0)], the Configure Hardware dialog box appears.    可以麻煩您幫我看一下問題出在哪嗎? 原本用 VB 寫, 但因廠商產品更新, VB 的模組還沒弄好, 所以改用 BCB 寫, 一直被 K , 寫不出來.... , 非當謝謝各位的幫忙。
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-09 19:16:58 IP:219.68.xxx.xxx 未訂閱
恩..照您這樣說..這應該是一個沒有傳回值的函數.. 他們所說的用法應該也沒錯...不知道會不會是您程式的問題.. 您可以將DLL與原始檔一起PO上來..看看是哪裡出問題.. 在這之前..還有一點要注意的.. 您可以試看看在程式中加入 < class="code"> HINSTANCE dll=LoadLibrary("XXX.dll"); if(dll!=NULL) { 您要做的事.. FreeLibrary(dll); } 如果不行..在麻煩您把程式碼PO上來 =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
系統時間:2024-11-26 17:19:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!