多语言混合编程

本人想深入了解一下程序设计的知识,无奈自身技能薄弱,希望大神指点:

多种语言混合编程是如何做到的。比如我们的许多软件,他整体上使用C编写的,但是在做某个计算时,为了方便,又用matlab来写出文件,再用c来调用在matlab里面写的文件。这种具体是怎样实现的,求指导。

起始所有程序都是一样的,最终都是机器码,只是在编写时使用的语言不同(编程语言都是程序的抽象,为了编程方便,本身并不是可运行的程序,最终必须编译成机器码才能运行,不同语言只是不同人编的,用的语法不同),你写的源文件无论是任何语言写的,最终编译的结果都是机器码。 函数调用在机器码就是很简单的一步,将参数表要求的参数值放入堆栈(顺序有约定),然后使用 jmp 指令跳转到要调用的函数的函数地址即可,别的程序不管你怎么实现,只要你告诉我参数表,和函数地址就能调用,所有程序最终都是机器码,自然也符合这个规则。。。 所以实现互调,只要将对方的接口程序文件映射到自己的进程中,然后预先知道他的参数表,得到他的接口函数地址,将参数放入堆栈,然后跳转到函数地址, 这样你就实现调用。。。。 winodws提供了一个文件类型叫做.dll 动态链接库,如果你希望让其他程序调用,只用将文件编译成dll即可,他就是一个程序文件,纯机器码,可以让任何程序调用。。。。
具体实现方法,通过loadliabroray("xxxxx\xxx.dll"),将该文件映射到进程,getprocaddress("函数名"),得到他的函数地址,假设你已经知道这个函数格式为 int func(int,int,char),你就定义一个该类型的函数指针 ,将getprocaddress("函数名")的地址给这个函数指针,按C语言格式调用即可,很简单的,这些都是操作系统的功劳,如果你学学windows系统编程,就知道了。。。
还有一种方式是,把另一个程序当做一个服务器程序,通过约定的数据来间接调用。。。。比如有个字符串,叫“吃饭”,你只要将这个“吃饭”这两个字发给另一个程序(操作系统提供了一个叫管道的内核对象,通过它,你可以给也使用该管道的程序发数据),他实现编了程序知道这是要干什么,然后就自己执行。。。追问

 

追答

.c 文件不是程序,只是程序的源文件,如果没有编译器的支持是不能互调的,如果你不信你可以百度。。。提到语言间互调,都是先生成 dll ,lib,com等程序文件(全部是编译之后的代码)。。。
你听说过在 vb 中写C代码编译的吗??? 源文件又不是程序,想混编你的编译器必须能编译多种语言,而且还能连接成功,那也太万能了,你想多了。。。 生成dll文件,别无他法。。。。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-04
这个应该是com编程吧。追问

请问能够详细讲解一下吗,为什么我描述的这个就是com编程呢。希望能够同样为我解答一下上面的追问提出的问题。

追答

com 编程其实挺复杂的,我接触过,但没有根据他开发什么东西,推荐看一下ATLhttp://wenku.baidu.com/link?url=moVKAaYbuKm_w2gOXYHSWgvx4VkPnZr3MGiHmWcC_CKoQ3RwJFajuq7VxYsisC_Uf5gNN5iSQrtSDKbUJbaz1qQ59vqJXX55Rl0OEtGqVyu

相似回答