锁定老帖子 主题:C代码移植问题(请多多建议)
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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调用同样功能的代码? |
|
返回顶楼 | |
发表时间:2006-11-17
可以, JNI
|
|
返回顶楼 | |
发表时间:2006-11-17
xiaoyu 写道 可以, JNI
ok,JNI刚才看了一下,的确可以实现dll的调用,只不过JNI对于调用C/C++的例子很多,但是对于调用.net的dll的例子不是很多.看来得先试试了. |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间: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 谢谢你的建议,这种方法我们也会尝试的.希望能找到一条最快捷的方法. |
|
返回顶楼 | |
发表时间:2006-11-20
关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。 |
|
返回顶楼 | |
发表时间:2006-11-20
rtdb 写道 关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。 所以应该包成.net类,在其它语言里调用就方便了。 |
|
返回顶楼 | |
发表时间:2006-11-21
rtdb 写道 关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。 是啊,以前那些C代码的入口函数都有结构传进去,并且是嵌套的结构,子结构里面还有char* const*之类的元素.Dll导出时基本不可能,但又不能修改这些入口函数. |
|
返回顶楼 | |
发表时间:2006-11-21
qiezi 写道 rtdb 写道 关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。 所以应该包成.net类,在其它语言里调用就方便了。 是啊,现在我们就在改写.net类中,并且客户方的PM说在最终的C#代码中不允许出现 int,double,unsigned long之类的字眼,更不允许出现unsafe{}(所以无法自动生成了,只好自己写). 又是一段辛酸的旅程啊 |
|
返回顶楼 | |
发表时间:2007-02-20
johnney.r 写道 qiezi 写道 rtdb 写道 关键在于定义C的DLL的接口函数时,最好只使用最基本的数据类型做参数。
若是搞个结构什么的出来,就不好玩了。 所以应该包成.net类,在其它语言里调用就方便了。 是啊,现在我们就在改写.net类中,并且客户方的PM说在最终的C#代码中不允许出现 int,double,unsigned long之类的字眼,更不允许出现unsafe{}(所以无法自动生成了,只好自己写). 又是一段辛酸的旅程啊 C的dll可以直接在java里调用,即用jni小小包装一下。 我这里很多成熟的产品都是这么做的。 顺便透露一下,PowerBuilder的实现里大量采用了这种技术。 |
|
返回顶楼 | |