zoukankan      html  css  js  c++  java
  • 使用托管C++调用C#的exe程序

    使用托管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     else
    26     {
    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             else
    19                 info.Invoke(null, null);
    20             //Application.EnableVisualStyles();
    21             //Application.SetCompatibleTextRenderingDefault(false);
    22             //Application.Run(new Form1());
    23         }
    24     }
  • 相关阅读:
    内核参数优化/etc/sysctl.conf
    python
    2014又一次认识我
    Android核心服务解析篇(三)——Android系统的启动
    Cocos2d-x 3.0 Android改动APK名、更改图标、改动屏幕方向、改动版本,一些须要注意的问题
    算术表达式
    数学之路-python计算实战(18)-机器视觉-滤波去噪(双边滤波与高斯滤波 )
    交叉排序
    iOS AES的加密解密
    codeforces 570 D Tree Requests
  • 原文地址:https://www.cnblogs.com/bitzhuwei/p/call_exe_within_managed_cpp.html
Copyright © 2011-2022 走看看