请查看以下设计。它是一个方框图,用于显示COMPONENTS
请注意,这是桌面应用程序的图表。你在这里看到的是组件,而不是类。以下是说明
C++/CLI code - The main GUI and the connector for all other services
OpenCV C++ Code - set of Opencv classes for image and video processing
C++ SMS Code - set of SMS classes written in C++
C# wrapper DLL - The dll to access the driver
C# Driver DLL - The driver of the device, written in C#
Speech recognition C# dll - set of speech recognition classes
Google Map DLL/JAR - Google map classes written in either C# or Java
Device - The device I need to access
现在,我的问题。
如您所见,这是一系列技术和语言。对我来说,在c#中编写所有语音代码似乎很容易,而不是将它们移到C ++ / CLI(其他C#dll必须是C#)。但是,我觉得有太多的dll与其他C ++代码集成。 我不能用C#或Java创建GUI。我必须实现Opencv(主要的),最简单的方法是C ++。
那么,混合语言和这样的技术,就像混合物一样好/好吗?
答案 0 :(得分:2)
如果解决方案为您提供了您想要的期望和性能并且易于维护,那么我认为它没有问题。如果你看看Linux,它建立在很多经常链接在一起的小程序上,所以使用C ++和perl,php,ruby,C代码等并不罕见。
例如,OSX需要在Objective-C中编写UI(可可)代码,而驱动程序在C中使用C ++和内核扩展。答案 1 :(得分:0)
我放弃JAR并在那里使用.Net类。添加Java没有任何好处。
我将整个C#块(语音,映射,驱动程序,包装器)移动到它们自己的进程,并定义IPC协议(可能是TCP / IP到localhost)以与C ++部分通信。我将继续使用原生C ++。因此,您有一个纯C ++进程和一个纯C#进程。
作为IPC协议设计的一部分,我将隐藏SMS和语音块的详细信息。您应该能够在没有另一方注意的情况下替换实现。