作者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/cn.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