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

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

浏览 17724 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-11-17  
qiezi 写道
johnney.r 写道
jack 写道
同意qiezi的做法,c++/CLI混合编译下你的c代码就可以了。然后直接就能够给其他的.net语言调用了。基本不会出错。

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

应该是编译成.net的DLL格式,.net可以直接import一个DLL。

那么编译成.net格式的DLL后,可以直接用java代码调用这些dll吗?因为现在新需求里面需要用j2ee调用同样功能的代码?
0 请登录后投票
   发表时间:2006-11-17  
可以, JNI
0 请登录后投票
   发表时间:2006-11-17  
xiaoyu 写道
可以, JNI

ok,JNI刚才看了一下,的确可以实现dll的调用,只不过JNI对于调用C/C++的例子很多,但是对于调用.net的dll的例子不是很多.看来得先试试了.
0 请登录后投票
   发表时间:2006-11-17  
.net2.0调用dll比jni更方便。
直接用以下形式就可以了。
  [DllImport("des64.dll")]
  private static extern int b64_size(int lenth, uint option);

c#调用des64.dll进行加密解密
http://cache.baidu.com/c?word=c%23%2C%2Enet%3B2%3B%2E%3B0%2C%B5%F7%D3%C3%3Bdll&url=http%3A//www%2Ehhxxttxs%2Ecom/article/show%2Easp%3Fid%3D9517&b=65&a=18&user=baidu
0 请登录后投票
   发表时间:2006-11-17  
zbird 写道
.net2.0调用dll比jni更方便。
直接用以下形式就可以了。
  [DllImport("des64.dll")]
  private static extern int b64_size(int lenth, uint option);

c#调用des64.dll进行加密解密
http://cache.baidu.com/c?word=c%23%2C%2Enet%3B2%3B%2E%3B0%2C%B5%F7%D3%C3%3Bdll&url=http%3A//www%2Ehhxxttxs%2Ecom/article/show%2Easp%3Fid%3D9517&b=65&a=18&user=baidu

谢谢你的建议,这种方法我们也会尝试的.希望能找到一条最快捷的方法.
0 请登录后投票
   发表时间:2006-11-20  
关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。
0 请登录后投票
   发表时间:2006-11-20  
rtdb 写道
关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。

所以应该包成.net类,在其它语言里调用就方便了。
0 请登录后投票
   发表时间:2006-11-21  
rtdb 写道
关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。

是啊,以前那些C代码的入口函数都有结构传进去,并且是嵌套的结构,子结构里面还有char* const*之类的元素.Dll导出时基本不可能,但又不能修改这些入口函数.
0 请登录后投票
   发表时间:2006-11-21  
qiezi 写道
rtdb 写道
关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。

所以应该包成.net类,在其它语言里调用就方便了。

是啊,现在我们就在改写.net类中,并且客户方的PM说在最终的C#代码中不允许出现 int,double,unsigned long之类的字眼,更不允许出现unsafe{}(所以无法自动生成了,只好自己写).
又是一段辛酸的旅程啊
0 请登录后投票
   发表时间:2007-02-20  
johnney.r 写道
qiezi 写道
rtdb 写道
关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。

所以应该包成.net类,在其它语言里调用就方便了。

是啊,现在我们就在改写.net类中,并且客户方的PM说在最终的C#代码中不允许出现 int,double,unsigned long之类的字眼,更不允许出现unsafe{}(所以无法自动生成了,只好自己写).
又是一段辛酸的旅程啊
我的建议是把它包装一个比较标准的C的dll,然后直接在VB.net里调用,在技术上是完全可以的,当然你如果觉得不好,可以包装成托管的.net dll.
C的dll可以直接在java里调用,即用jni小小包装一下。
我这里很多成熟的产品都是这么做的。
顺便透露一下,PowerBuilder的实现里大量采用了这种技术。
0 请登录后投票
论坛首页 编程语言技术版

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