作者qngu86 ()
看板C_Sharp
標題[問題] 自訂控制項 加入form後找不到dll
時間Thu Sep 27 10:07:02 2018
最近嘗試使用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,但此作法可適性差
不知各位大大是否有遇過類似狀況得以解決的嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.109.14
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1538014024.A.39B.html
1F:推 neo5277: 那你把帳密放在appsetting裡,form的建構寫個方法call 09/27 11:12
2F:→ neo5277: 應該也不用做成控制項吧? 登入失敗API應該會回MSG就EXCEP 09/27 11:13
3F:→ neo5277: TION就抓他應該就好了感覺不用寫控制項啊 09/27 11:13
4F:推 s4300026: 放在.sln的資料夾呢? 09/27 12:12
5F:→ s4300026: 或者是.projc的資料夾? 09/27 12:13
6F:→ qngu86: 謝謝n大回覆好方法,但我還是想知為何這樣不行XD 09/27 12:59
7F:→ qngu86: 回s大,可以放的資料夾我都放了,除了system32 XD 09/27 13:00
※ 編輯: qngu86 (1.163.109.14), 09/27/2018 13:01:14
8F:推 s4300026: 你哪些是用c#,哪些是用c++/clr 09/27 13:40
9F:推 s4300026: 沒試過c# form的控制項是用外部的控制項 09/27 13:41
10F:→ qngu86: 券商的dll好像是用c++寫的 其他我用c# 09/27 13:49
11F:→ testPtt: 你有加入專案嗎? 09/27 16:10
12F:推 s4300026: 我建議關注點分離,你做三大class。 1. 控制項就是純的 09/27 18:11
13F:→ s4300026: 外框,最好能做個interface,把控制項內一定會用到的but 09/27 18:11
14F:→ s4300026: ton, textbox定義一下,裡面不含任何事件處理。 2. 定義 09/27 18:11
15F:→ s4300026: 後端class,專門呼叫別人的dll,最好也做interface,把 09/27 18:11
16F:→ s4300026: 討人厭的import限制在這個class內。 3.溝通用class,建 09/27 18:11
17F:→ s4300026: 構時輸入兩邊的interface,把所有的的事件處理寫在這裡 09/27 18:12
18F:→ s4300026: 。 09/27 18:12
19F:→ qngu86: 謝謝你的建議 09/27 23:41
20F:推 jamyang: 印象中使用自定控制項後,相對路徑會變成執行檔的相對路 09/30 13:10
21F:→ jamyang: 徑,可以確認一下是不是這個因素 09/30 13:10