首先,C++项目没有.NET绑定或ActiveX/COM集成。它只是一个普通的MS VC++ 9项目。如果我要在我的.NET应用程序中使用该项目,我必须以某种方式与之进行接口,即创建类实例、设置属性、调用方法、传输数据等。
其次,它被构建为独立的Windows应用程序,并使用MS Windows API管理其自己的窗口。这很好,但不知何故,我需要在后台运行.NET VM,管理所有我的C#代码并运行它们。我不写C++,所以我需要坚持使用C#来构建一个围绕这个库的应用程序。
第三,无论我是否在与C++库相同的进程中运行,我都需要一种方法将这两个独立的应用程序构建/接口/调试,就像它们是一个应用程序一样。除了我编写了一些用于高性能数据操作的C++ DLL外,我没有任何C++编程背景。
因此,有许多问题,但不知从何开始!
我可以完全编译此库并将其放入VC EXE中,但是如何将我的.NET代码与其一起进行协同编译?或者,如何将C++代码编译为.NET EXE,以便在托管环境中运行?请注意,它并不是为此而设计的,如果尝试更改太多可能会出现问题。主要问题是与之进行接口。如何公开某些C++类以从.NET中访问?我知道我需要哪些类,我只需要几十个类及其相关方法/属性可从.NET中使用。我不介意在.NET中手写包装器类来帮助.NET VM了解来回传输的字节的类结构。我希望可以直接从托管环境中使用C++对象,这样大部分我的代码可以保留在.NET中。
即使我将其作为独立应用程序运行,我是否必须诉诸套接字或其他通信方式?这是最坏的情况,我会尽一切努力避免这种情况。
任何帮助或指针都将不胜感激,我希望我已经清楚地表达了自己手头的任务,我的问题足够具体和可回答。感谢任何帮助!
编辑:如果我编写包装类或生成它们,我可以使用P/Invoke创建类实例并调用它们的方法,并让它们在后台运行本机C++代码吗?这样的C++对象的内存将存储和管理在哪里?在.NET堆内还是外部?