返回信息流需要二次封装的原因
厂家提供的dll,因为C++ mingling,dumpbin 出来出来函数名字是乱码。
现在需再次封装个dll 用def文件导出名字正常的dll 以备java使用
实在对vc无力了,连加载lib都和书上不一样
可否求大牛帮忙封装下or指点下
可送大果粒或者something else
这是一条镜像帖。来源:北邮人论坛 / cpp / #77802同步于 2014/3/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求助】dll的二次封装
mumubin
2014/3/25镜像同步23 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
已上传,就是厂家给的dll,在java 中没法直接用。需要再封个dll。
我表达的很难理解吗?
【 在 gdl 的大作中提到: 】
: 是在是没搞明白你想做个什么,能把那个dll给出来吗
lz,我也不是很懂这个,我目前的学习成果如下,和你交流下:
1、你说的那个乱码:?GetDataMemSpaceLineCounts@USB20BSDevOp@@QAEHH@Z,这种形式的是c++ 编译器的stdcall修饰,他其实就是函数名,这个例子转换下就是public: int __thiscall USB20BSDevOp::GetDataMemSpaceLineCounts(int)
2、找了些资料试着2次封装,目前我是针对GetDataMemSpaceLineCounts做实验,目前能成功执行,返回结果一直是65536(不知道这个结果如何)
参考资料如下:http://blog.163.com/kevin_fly/blog/static/77005157200851962731273/,http://www.cnblogs.com/cy163/archive/2009/12/15/1624807.html,
导出表完全就是一个不友好的导出类,没提供类导出方法,动态加载基本无解;如果厂商能提高.h和.lib的话,直接考虑静态加载吧。
BTW,鄙视下export c++ method的无良厂商!
【 在 mumubin 的大作中提到: 】
: 需要二次封装的原因
: 厂家提供的dll,因为C++ mingling,dumpbin 出来出来函数名字是乱码。
: 现在需再次封装个dll 用def文件导出名字正常的dll 以备java使用
: ...................
那是类导出方法__thiscall和__stdcall是有很大不同的,你封装的方法能返回结果不会异常的前提是类成员函数中没有对类成员变量的访存。
【 在 gdl 的大作中提到: 】
: lz,我也不是很懂这个,我目前的学习成果如下,和你交流下:
: 1、你说的那个乱码:?GetDataMemSpaceLineCounts@USB20BSDevOp@@QAEHH@Z,这种形式的是c++ 编译器的stdcall修饰,他其实就是函数名,这个例子转换下就是public: int __thiscall USB20BSDevOp::GetDataMemSpaceLineCounts(int)
: 2、找了些资料试着2次封装,目前我是针对GetDataMemSpaceLineCounts做实验,目前能成功执行,返回结果一直是65536.
: ...................
这些是今天现学的。确实有头文件和lib会好很多
【 在 tonyjansan 的大作中提到: 】
: 那是类导出方法__thiscall和__stdcall是有很大不同的,你封装的方法能返回结果不会异常的前提是类成员函数中没有对类成员变量的访存。
:
有,这些都有。所以我想二次封装下。导出个友好封装的dll,然后在java中使用
【 在 tonyjansan 的大作中提到: 】
: 导出表完全就是一个不友好的导出类,没提供类导出方法,动态加载基本无解;如果厂商能提高.h和.lib的话,直接考虑静态加载吧。
: BTW,鄙视下export c++ method的无良厂商!
:
对,显示调用的。我试了下,那位同学说得对,如果调用的函数对类的成员变量有操作就会报异常,要想一切正常的话,定义那个类的头文件是必要的。
【 在 mumubin 的大作中提到: 】
: 新上传了lib,你是显示调用的吗?