[問題] 自訂控制項 加入form後找不到dll

作者: qngu86   2018-09-27 10:07:02
最近嘗試使用C# 接券商api下單
因為每個程式下單前都要先登入券商
所以後來把登入券商這段作成自訂控制項,方便未來程式使用
而自訂控制項中就有引用券商的api,該api為c++所編譯之dll
所以使用 [DllImport("SorApi.dll", EntryPoint = "XXXX")] 來引用dll
當自訂控制項完成後,從工具箱要拉到新的form時
卻出現 無法載入DLL 'Sorapi.dll' ,找不到指定的模組
(發生例外狀況於HRESULT:0x8007007E)的錯誤
檢查後確實連同自訂控制項的dll及該dll會引用到的dll
都一併放置於新程式的bin\debug中
現在的疑問就是
若不使用自訂控制項 土法煉鋼 把登入券商的動作 直接寫在form中 就正常
但使用自訂控制項 拉到form裡 就無法載入DLL
若在DllImport時把路徑寫死,卻又可正常載入DLL,但此作法可適性差
不知各位大大是否有遇過類似狀況得以解決的嗎?
謝謝
作者: neo5277 (I am an agent of chaos)   2018-09-27 11:12:00
那你把帳密放在appsetting裡,form的建構寫個方法call應該也不用做成控制項吧? 登入失敗API應該會回MSG就EXCEPTION就抓他應該就好了感覺不用寫控制項啊
作者: s4300026 (s4300026)   2018-09-27 12:12:00
放在.sln的資料夾呢?或者是.projc的資料夾?
作者: qngu86   2018-09-27 12:59:00
謝謝n大回覆好方法,但我還是想知為何這樣不行XD回s大,可以放的資料夾我都放了,除了system32 XD
作者: s4300026 (s4300026)   2018-09-27 13:40:00
你哪些是用c#,哪些是用c++/clr沒試過c# form的控制項是用外部的控制項
作者: qngu86   2018-09-27 13:49:00
券商的dll好像是用c++寫的 其他我用c#
作者: testPtt (測試)   2018-09-27 16:10:00
你有加入專案嗎?
作者: s4300026 (s4300026)   2018-09-27 18:11:00
我建議關注點分離,你做三大class。 1. 控制項就是純的外框,最好能做個interface,把控制項內一定會用到的button, textbox定義一下,裡面不含任何事件處理。 2. 定義後端class,專門呼叫別人的dll,最好也做interface,把討人厭的import限制在這個class內。 3.溝通用class,建構時輸入兩邊的interface,把所有的的事件處理寫在這裡。
作者: qngu86   2018-09-27 23:41:00
謝謝你的建議
作者: jamyang (Jack)   2018-09-30 13:10:00
印象中使用自定控制項後,相對路徑會變成執行檔的相對路徑,可以確認一下是不是這個因素

Links booklink

Contact Us: admin [ a t ] ucptt.com