托管C++嵌入C#

来源:互联网 发布:建筑cad软件下载 编辑:程序博客网 时间:2024/05/18 01:26

http://blog.csdn.net/csethcrm/article/details/18261331


使用托管C++调用C#的exe程序。

(事后证明是对Reflector是无效的。)哎。

添加CLR控制台应用程序。把C#的exe程序放到“资源文件”文件夹下,右键属性的项类型设置为已编译的托管资源。

在主程序代码的main函数改写为如下内容:

复制代码
 1 // x.cpp: 主项目文件。 2  3 #include "stdafx.h" 4  5 using namespace System; 6  7 [STAThreadAttribute] 8 int main(array<System::String ^> ^args) 9 {10     System::Reflection::Assembly^ a;11     a = System::Reflection::Assembly::GetExecutingAssembly();12     System::IO::Stream ^ stream;13     stream = a->GetManifestResourceStream("csharp.exe");14     array<System::Byte> ^ bs = gcnew array<System::Byte>(stream->Length);15     stream->Read(bs, 0, (int)(stream->Length));16     System::Reflection::Assembly^ exe;17     exe = System::Reflection::Assembly::Load(bs);18     System::Reflection::MethodInfo^ info;19     info = exe->EntryPoint;20     array<System::Reflection::ParameterInfo^ > ^ parameters = info->GetParameters();21     if ((parameters != nullptr) && (parameters->Length > 0))22     {23         info->Invoke(nullptr, (array<System::Object ^ > ^) args);24     }25     else26     {27         info->Invoke(nullptr, nullptr);28     }29     return 0;30 }
复制代码

 其对应的C#版代码如下:

复制代码
 1     static class Program 2     { 3         /// <summary> 4         /// 应用程序的主入口点。 5         /// </summary> 6         [STAThread] 7         static void Main(string[] args) 8         { 9             var asm = Assembly.GetExecutingAssembly();10             Stream stream = asm.GetManifestResourceStream("csharp.exe");11             byte[] bs = new byte[stream.Length];12             stream.Read(bs, 0, (int)stream.Length);13             var exe = Assembly.Load(bs);14             MethodInfo info = exe.EntryPoint;15             ParameterInfo[] parameters = info.GetParameters();16             if ((parameters != null) && (parameters.Length > 0))17                 info.Invoke(null, (object[])args);18             else19                 info.Invoke(null, null);20             //Application.EnableVisualStyles();21             //Application.SetCompatibleTextRenderingDefault(false);22             //Application.Run(new Form1());23         }24     }
复制代码
0 0
原创粉丝点击