[问题] 自订控件 加入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