C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) vc 2013 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) c++/clr 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) io card 6308 问题(Question): 我有使用某家公司出的外部硬体 我想要把该设备的占用,使用,释放写成native c++ class 然後封装成dll档 (已完成) 然後我想要使用c#的视窗介面作为人机介面(已完成) 因此我使用c++/clr,撰写managed c++, 里面使用native c++的指标指向我的native c++ class(已完成) 然後再将managed c++包成dll档(已完成) 供人机介面呼叫(已完成) 我想问的是,编译时可过 呼叫的时出现 file not found 错误 该怎麽解决这样的问题呢? 喂入的资料(Input): 预期的正确结果(Expected Output): 错误结果(Wrong Output): Compile的结果 http://imgur.com/mkhsV8O 执行的结果 http://imgur.com/mDZQZQV System.IO.FileNotFoundException BadImageFormatException 程式码(Code):(请善用置底文网页, 记得排版) 方案的编排 http://imgur.com/0af27w3 Native 专案 设定 http://imgur.com/cazUfFj head http://imgur.com/9Wb1zYU cpp http://imgur.com/NCwafaL Managed 专案 设定 http://imgur.com/d8ggBbC head http://imgur.com/uwIvqFk cpp http://imgur.com/0vyE5JF CSharp 专案 设定 http://imgur.com/HbhYv00 cpp http://imgur.com/ifhz7n5 补充说明(Supplement): 使用manged c++ include native c++ .h 和 dll 使用 managed c++ reference managed c++ 的dll 目前绕过去的方法 (可行的方法) 方案 http://imgur.com/8HTnOxS head http://imgur.com/x9PmU0i cpp http://imgur.com/nR1fYla 如果你想问差在哪? 就是全部塞在一个专案里 "很丑" 我喜欢做成一方案多专案 native 一个专案 managed 一个专案 myForm 一个专案 ----------------------------------------- 解决方法: 1. 检查exe资料夹下是否有所有需要连结的dll档 (System.IO.FileNotFoundException) 2. 采用X86平台 (BadImageFormatException) 所以C++/Clr是可以直接桥接 managed 和 native的。 在分裂成多专案时无特别需要注意的地方。 参考文献: https://msdn.microsoft.com/zh-tw/library/ms235281.aspx https://stackoverflow.com/questions/23295906/badimageformatexception-when-using-c-cli-in-a-c-sharp-application https://stackoverflow.com/questions/647310/c-sharp-to-c-cli-to-c-dll-system-io-filenotfoundexception --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.71.54.85
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1497064287.A.664.html
1F:→ james732: C#应该可以直接吃C/C++的DLL? 06/10 11:40
2F:推 petercoin: C#用Dllimport就可以用C/C++的dll了 06/10 12:17
3F:→ s4300026: 我使用c++/clr,他可以只要include .h 和dll,不用impor 06/10 14:02
4F:→ s4300026: t指令 06/10 14:02
5F:推 kwpn: 用include .h 不用import指令 的好处是什麽? 06/10 15:28
6F:推 CoNsTaR: 因为 type safe? 06/10 17:48
7F:推 TobyH4cker: 阿所以你CLI→native又是怎麽实作的 06/10 19:31
8F:→ TobyH4cker: include header 和 DLL 老实讲一点线索都没有 06/10 19:35
9F:→ s4300026: 好处是懒啊~~~我可能要後天才能给code,手边没电脑 06/10 21:31
※ 编辑: s4300026 (1.163.55.81), 06/11/2017 10:04:17
10F:→ s4300026: 更新完成~ 我用fopen模拟外部原件 因此不要问我说 06/11 10:07
11F:→ s4300026: Csharp 有相同功能的东西,为什麽要用C的... 06/11 10:08
12F:→ s4300026: 感谢大家~ 希望code不会写得很乱看不懂... 06/11 10:08
※ 编辑: s4300026 (1.163.55.81), 06/11/2017 10:59:38
13F:→ FrozenMoment: C sharp 有试过改成 prefer x86 吗? 06/11 15:32
14F:→ s4300026: 没有耶,但我觉得不是那个问题... 我觉得问题可能是mana 06/11 18:26
15F:→ s4300026: ged看不到native,虽然都是dll 06/11 18:26
16F:→ s4300026: 因为相同的程式码全混在一起是可以run的 06/11 18:27
17F:→ firose: 直接下中断点除错不是比较快? 06/11 23:27
※ 编辑: s4300026 (220.128.115.242), 06/12/2017 09:25:52
18F:→ TobyH4cker: 所以最後问题时DLL不在EXE的search path? 06/12 09:54
19F:→ TobyH4cker: 是 06/12 09:55
是的,主要是因为在单一专案时,我会把搜寻的dll放在debug那个资料夹内 当多个专案时,我的习惯是对各个专案先做编译,确认各个专案没有问题 当然,我也会把必要的dll放在 "各自专案" 下让他们各自搜寻的到 但是整合成单一方案时,还是要再注意是否有将各自专案include的dll放到 起始专案下的debug资料夹 而我就是缺了这个步骤, 导致各自编译没问题,放在单一专案执行测试没问题 但是拆成多专案时却有问题 造成我当时的逻辑是怀疑 会不会是各自专案产生的dll没办法被读取 (因为牵涉到managed和native的连结) 直至被要求程式码时 我考量到这边的人不可能有市面商用的dll可以include能重现问题 因此重撰采用 fopen 和 fclose 来模拟 如果您看得仔细 我当时在问的是 System.IO.FileNotFoundException 但贴图却是 BadImageFormatException 当有人问说是否要改平台(X86/ X64)时 把 BadImageFormatException 除错後 我才发现 System.IO.FileNotFoundException 的现象无法重现 (因为fopen/ fclose 的实作档是标准档,一般情况下一定会被找的到) 这时我才意识到可能不是 managed 和 native 间呼叫的问题 (因为可正确执行fopen) 而可能是其他问题 ※ 编辑: s4300026 (220.128.115.242), 06/12/2017 10:17:57
20F:→ FrozenMoment: 解成功了吗? 06/12 19:32
21F:→ s4300026: done 06/12 21:24







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP