锁定老帖子 主题:C代码移植问题(请多多建议)
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-17
现在由于客户要求,需要把10几年以前写的代码(基于标准C的)用Vb.net调用,所以我们研究出两套方案.<o:p></o:p> 1. 将现有的C代码原封不动,直接封装成动态链接库.然后用Vb.net调用<o:p></o:p> 2. 先把C代码改造成C#代码(dll和WebService程序),然后用Vb.net或者基于Web应用的程序调用。<o:p></o:p> 现在我们偏重第二种,请问大家有什么建议?<o:p></o:p> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-11-17
为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。我自己没做过,以前一个项目中让一个同事在vc.net中把cpython简单包装了下,然后在C#中直接调用,要写的代码很少。结果很成功,可以用python脚本控制一个C#游戏界面,不过可惜同事因此而投入.net阵营,不久就离开公司了,都是我的错。。。
|
|
返回顶楼 | |
发表时间:2006-11-17
同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。
|
|
返回顶楼 | |
发表时间:2006-11-17
qiezi 写道 为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。
这个是我们的第一个方案,但是这个方案或许有几个缺点: 1.直接把C代码包装的话,指针的问题必须考虑.因为Vb.net和C#中都是使用安全代码的.大家都不希望被 .net解释成 unsafe{}这样的代码。 2.直接把C封装成动态链接库的话,用C#.net可以调用.但是VB.net不一定能够调用,因为Vb.net需要在 DllExport的时候必须传出一个参数,否则无法调用. 3.如果改写成C#的话,对后期的开发维护很方便,因为同在.net环境中跟踪调试很方便.而C代码原样照搬会有问题. 上面是我的拙见,或许分析的不对.请多多建议.先谢谢啦. |
|
返回顶楼 | |
发表时间:2006-11-17
jack 写道 同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。
哦?那么用C++/CLI混合编译后,以什么形式提供给.net调用呢?比如说lib文件或者翻译成.net格式的文件. |
|
返回顶楼 | |
发表时间:2006-11-17
johnney.r 写道 qiezi 写道 为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。
这个是我们的第一个方案,但是这个方案或许有几个缺点: 1.直接把C代码包装的话,指针的问题必须考虑.因为Vb.net和C#中都是使用安全代码的.大家都不希望被 .net解释成 unsafe{}这样的代码。 2.直接把C封装成动态链接库的话,用C#.net可以调用.但是VB.net不一定能够调用,因为Vb.net需要在 DllExport的时候必须传出一个参数,否则无法调用. 3.如果改写成C#的话,对后期的开发维护很方便,因为同在.net环境中跟踪调试很方便.而C代码原样照搬会有问题. 上面是我的拙见,或许分析的不对.请多多建议.先谢谢啦. 我到是觉得不要考虑那么多,每种方案尝试下,也花不了几天时间。完全改写的话,所费时间多了。不如多试试 |
|
返回顶楼 | |
发表时间:2006-11-17
hurricane1026 写道 qiezi 写道 为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。我自己没做过,以前一个项目中让一个同事在vc.net中把cpython简单包装了下,然后在C#中直接调用,要写的代码很少。结果很成功,可以用python脚本控制一个C#游戏界面,不过可惜同事因此而投入.net阵营,不久就离开公司了,都是我的错。。。
这个用不着自责吧。用什么语言不也是programmer?java和.net也没有不共戴天吧。 呵呵,或许他这个同事比较优秀,并且还是自己带出来的. |
|
返回顶楼 | |
发表时间:2006-11-17
jack 写道 johnney.r 写道 qiezi 写道 为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。
这个是我们的第一个方案,但是这个方案或许有几个缺点: 1.直接把C代码包装的话,指针的问题必须考虑.因为Vb.net和C#中都是使用安全代码的.大家都不希望被 .net解释成 unsafe{}这样的代码。 2.直接把C封装成动态链接库的话,用C#.net可以调用.但是VB.net不一定能够调用,因为Vb.net需要在 DllExport的时候必须传出一个参数,否则无法调用. 3.如果改写成C#的话,对后期的开发维护很方便,因为同在.net环境中跟踪调试很方便.而C代码原样照搬会有问题. 上面是我的拙见,或许分析的不对.请多多建议.先谢谢啦. 我到是觉得不要考虑那么多,每种方案尝试下,也花不了几天时间。完全改写的话,所费时间多了。不如多试试 好的,谢谢你的建议.我马上安排人用这种方案尝试.或许会有新的发现 .因为时间对我们来说现在很重要. |
|
返回顶楼 | |
发表时间:2006-11-17
新的问题又出现了,客户刚发来新的需求,他们希望在另外一个基于J2ee的项目中调用同样一个调度程序(也就是以前写的C程序)。彻底傻眼了,怎一个不爽了得.
有没有什么好的方法实现? 或者说实现起来很麻烦,找个什么理由回绝客户? |
|
返回顶楼 | |
发表时间:2006-11-17
johnney.r 写道 jack 写道 同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。
哦?那么用C++/CLI混合编译后,以什么形式提供给.net调用呢?比如说lib文件或者翻译成.net格式的文件. 应该是编译成.net的DLL格式,.net可以直接import一个DLL。 |
|
返回顶楼 | |