论坛首页 编程语言技术论坛

C代码移植问题(请多多建议)

浏览 17723 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-11-17  
C

现在由于客户要求,需要把10几年以前写的代码(基于标准C)Vb.net调用,所以我们研究出两套方案.<o:p></o:p>

1.      将现有的C代码原封不动,直接封装成动态链接库.然后用Vb.net调用<o:p></o:p>

2.      先把C代码改造成C#代码(dllWebService程序),然后用Vb.net或者基于Web应用的程序调用。<o:p></o:p>

 现在我们偏重第二种,请问大家有什么建议?<o:p></o:p>

   发表时间:2006-11-17  
为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。我自己没做过,以前一个项目中让一个同事在vc.net中把cpython简单包装了下,然后在C#中直接调用,要写的代码很少。结果很成功,可以用python脚本控制一个C#游戏界面,不过可惜同事因此而投入.net阵营,不久就离开公司了,都是我的错。。。
0 请登录后投票
   发表时间:2006-11-17  
同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。
0 请登录后投票
   发表时间: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代码原样照搬会有问题.

上面是我的拙见,或许分析的不对.请多多建议.先谢谢啦.
0 请登录后投票
   发表时间:2006-11-17  
jack 写道
同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。

哦?那么用C++/CLI混合编译后,以什么形式提供给.net调用呢?比如说lib文件或者翻译成.net格式的文件.
0 请登录后投票
   发表时间: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代码原样照搬会有问题.

上面是我的拙见,或许分析的不对.请多多建议.先谢谢啦.


我到是觉得不要考虑那么多,每种方案尝试下,也花不了几天时间。完全改写的话,所费时间多了。不如多试试
0 请登录后投票
   发表时间:2006-11-17  
hurricane1026 写道
qiezi 写道
为什么要改造成C#?直接在VC.net中把C接口包装一下,一起编译成.net库就可以吧。我自己没做过,以前一个项目中让一个同事在vc.net中把cpython简单包装了下,然后在C#中直接调用,要写的代码很少。结果很成功,可以用python脚本控制一个C#游戏界面,不过可惜同事因此而投入.net阵营,不久就离开公司了,都是我的错。。。

这个用不着自责吧。用什么语言不也是programmer?java和.net也没有不共戴天吧。

呵呵,或许他这个同事比较优秀,并且还是自己带出来的.
0 请登录后投票
   发表时间: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代码原样照搬会有问题.

上面是我的拙见,或许分析的不对.请多多建议.先谢谢啦.


我到是觉得不要考虑那么多,每种方案尝试下,也花不了几天时间。完全改写的话,所费时间多了。不如多试试

好的,谢谢你的建议.我马上安排人用这种方案尝试.或许会有新的发现 .因为时间对我们来说现在很重要.
0 请登录后投票
   发表时间:2006-11-17  
新的问题又出现了,客户刚发来新的需求,他们希望在另外一个基于J2ee的项目中调用同样一个调度程序(也就是以前写的C程序)。彻底傻眼了,怎一个不爽了得.
有没有什么好的方法实现?
或者说实现起来很麻烦,找个什么理由回绝客户?
0 请登录后投票
   发表时间:2006-11-17  
johnney.r 写道
jack 写道
同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。

哦?那么用C++/CLI混合编译后,以什么形式提供给.net调用呢?比如说lib文件或者翻译成.net格式的文件.

应该是编译成.net的DLL格式,.net可以直接import一个DLL。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics