当前位置:编程学习 > C#/ASP.NET >>

C# 与其他语言混合编程的问题

小弟一直用c#编程,我们这个小组其他成员有用vC++的,有用VB.NET,还有用FORTRAN的,现在老板给我们布置了任务,大家只能合作完成。
在此,有个疑问,在我们这个项目中如何才能实现多种语言的混合呢?
我现在只知道可以通过动态链接库.DLL的方式
请教各位,大家在作项目时碰到这种问题的话都有哪些解决方案呢?请畅所欲言,谢谢 --------------------编程问答-------------------- 不要考虑语言差异即可。

在统一的.net平台上,所有的DLL都可以互相引用,而且无需考虑细节。

就是引用程序集罢了,一旦引入了.net的程序集(DLL)就可以使用其中公开的类。有源代码的话还可以跟踪调试,一会儿从C#跳转到C++一会儿又跳转到VB,很有趣。

如果不是工作在统一的.net平台上就比较麻烦。

我不知道FORTRAN是否可以编译成DLL,如果不能,写FORTRAN的就写控制台程序,调用FORTRAN程序的通过传递命令行参数进行。
VB.net、C#托管C++可以直接互相引用
原生C++的可以写COm组件,也可以写传统的DLL。 --------------------编程问答-------------------- 问一个弱弱的问题,怎样才算工作在统一的.NET平台上呢?是不是指最终把程序组合起来的地方在.NET平台啊?还有就是Fortran是可以生成.DLL的。
也就是说在一个统一的平台下也只是通过.DLL一条途径进行交互咯? --------------------编程问答-------------------- 开发过程中只能通过动态链接库加入同一个解决方案的方式

但最后都转为C#,编译后,再用Reflector反编译为C#即可~ --------------------编程问答-------------------- .net的dll不同于普通的dll,它不是依靠引出函数工作的。只是借用了dll的形式罢了。

你不能混淆.net下的dll和win32 dll。

在统一平台下的含义,是指都使用托管代码的形式,而不是混合托管和原生代码。

.net下生成的exe或者dll都不包含真正可以在CPU上执行的机器码,原生代码指那些包含可以在cpu上立即执行机器码的程序。

.net下的exe和dll其实和win32原生代码程序是不一样的,我不清楚为什么还要沿用老的扩展名和基本构造可能是为了让人看起来更舒服一些吧,其实.net的程序集完全可以用新的扩展名,就像java的程序。

--------------------编程问答-------------------- 不清楚,你们都用.net一个平台吗?我怎么不知道.net里面有用FORTRAN的阿?
如果都用.net的话基本没有问题,各做各的,然后项目相互引用;不是的话我就不清楚了 --------------------编程问答-------------------- c#可以调试非托管c++的dll,我们项目组目前就是这样干的 --------------------编程问答-------------------- 偶学习一下吧 --------------------编程问答-------------------- 一个组还不统一语言.......
我以前做的时候虽然也是没统一语言好歹也是c# c++.net vb.net之中的不统一... --------------------编程问答-------------------- 多种语言的混合是可行的,也是.net框架的特性之一。.任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。
很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。
CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。这样通过符合CLS的不同语言编译出的IL托管代码再通过CLR运行时生成CPU认识的机器码。 --------------------编程问答-------------------- 调用非托管dll [DllImport("tmp.dll")] --------------------编程问答-------------------- 这样说来,是不是c++ 不能调用 c#生成的.dll吗?
还有就是,我们这个小组确实比较麻烦,他们用的不是.NET平台下的c++和VB,是VC++6.0 VB6.0
难道说这样就没办法统一了吗?
--------------------编程问答-------------------- 这样一味的追求多语言,会给后期维护带来不少的麻烦,对维护人员的要求也是相当的高,既要懂VC++,C#,VB.NET... --------------------编程问答-------------------- 原生VC++可以调用C#生成的dll。否则微软怎么用C++写clr?呵呵。

这些是否文档化了我不清楚,我以前在一些书上零星的看到过一些介绍,具体的还要看MSDN。你可以看一下,《.net本质论》《C#高级编程》,还有一本jefrrey 写的书,名字可能拼写错误,就是那个写《windows 核心编程》的牛人,他的书一向有大量的涉及背后如何实现的秘密。 --------------------编程问答-------------------- 微软好像是提供了一组API用于原生程序加载运行.net的程序集。但是看上去很繁琐。 --------------------编程问答-------------------- http://www.it130.cn/Article/FAQ/.net-jishu/C/2007-1-31/20070131090603100.html
我试过了 还是不行
宾果~! 
OK了,可以跟踪进VC的程序了,原来这么简单, 
就是把C#项目属性改为启用非托管调试。 
:) 

--------------------------------------------------------

Dll项目源代码里设置断点! 

--------------------------------------------------------

还真的是这样,又学到一样好东西咯。。。 

--------------------------------------------------------

就是把C#项目属性改为启用非托管调试。 
------------------ 
学习了:) 

--------------------编程问答-------------------- 易做图他们用C#开发比讨论多语言协作要现实和快速的多。 --------------------编程问答-------------------- 我们team也有同样的问题,
但是,都是在.net下开发的,最后相互引用dll就可以了 --------------------编程问答-------------------- <span style="color:red">路过</span> --------------------编程问答-------------------- 不知这个有无用。 --------------------编程问答-------------------- 就你们这种几个人,还用了几种语言,本身都是学生的。

没人精通所有的技术,没人能够协调团队,没有多少时间折腾,也没有项目预算。老师负责,但是恐怕自己也不懂,几个人自说自话,各管一块。

基本就是不靠谱。这种项目基本就是一个失败。

根本不用研究什么了。
--------------------编程问答-------------------- 老板 布置得任务。。。都叫老板 你们 读研啊 读博啊?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,