这个就是在程序中调用编译器···

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using Microsoft.CSharp;
using Microsoft.Internal;
using Evaluator;
using System.Globalization;
using System.CodeDom;
using System.CodeDom.Compiler;

namespace xmlPathTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void btnAddNodes_Click(object sender, EventArgs e)
        {
            // 1.CSharpCodePrivoder
            CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
            // 2.ICodeComplier
            ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
            // 3.CompilerParameters
            CompilerParameters objCompilerParameters = new CompilerParameters();
            objCompilerParameters.ReferencedAssemblies.Add("System.dll");       
            objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll");
            objCompilerParameters.ReferencedAssemblies.Add("System.Drawing.dll");
            objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll");
            objCompilerParameters.ReferencedAssemblies.Add("xmlPathTest.exe");
            objCompilerParameters.GenerateExecutable = false;
            objCompilerParameters.GenerateInMemory = true;
            // 4.CompilerResults
            CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, CreateCode(txtFrmName.Text.Trim()));
            if (cr.Errors.HasErrors)
            {
                richTextBox1.Text = "编译错误:\r\n";
                foreach (CompilerError err in cr.Errors)
                {
                    richTextBox1.Text += err.ErrorText + "\r\n";
                }
            }
            else
            {
                // 通过反射,调用HelloWorld的实例
                Assembly objAssembly = cr.CompiledAssembly;
                object objHelloWorld = objAssembly.CreateInstance("xmlPathTest.HelloWorld");
                MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
               objMI.Invoke(objHelloWorld, null);
            }
        }    
        private string CreateCode(string frmName)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("using System;");
            sb.Append(Environment.NewLine);
            sb.Append("using System.Collections.Generic;");
            sb.Append(Environment.NewLine);
            sb.Append("using System.ComponentModel;");
            sb.Append(Environment.NewLine);
            sb.Append("using System.Data;");
            sb.Append(Environment.NewLine);
            sb.Append("using System.Drawing;");
            sb.Append(Environment.NewLine);
            sb.Append("using System.Text;");
            sb.Append(Environment.NewLine);
            sb.Append("using System.Windows.Forms;");
            sb.Append(Environment.NewLine);
            sb.Append("namespace xmlPathTest");
            sb.Append(Environment.NewLine);
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append("      public class HelloWorld");
            sb.Append(Environment.NewLine);
            sb.Append("      {");
            sb.Append(Environment.NewLine);
            sb.Append("          public void OutPut()");
            sb.Append(Environment.NewLine);
            sb.Append("          {");
            sb.Append(Environment.NewLine);
            sb.AppendFormat("               new xmlPathTest.{0}().Show();",frmName);
            sb.Append(Environment.NewLine);
            sb.Append("          }");
            sb.Append(Environment.NewLine);
            sb.Append("      }");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            richTextBox1.Text = sb.ToString();
            return sb.ToString();
           
        }
    }
}




转载于:https://www.cnblogs.com/tling091223/archive/2009/12/29/1634734.html

在c++程序中调用被c编译器编译后的函数,为什么要加extern“c” C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。 假设某个C 函数的声明如下: void foo(int x, int y); 该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指 阅读详情

相关推荐

AUTOSAR BswM配置实战:手把手教你用Vector Davinci Configurator搭建第一个模式管理规则

本文详细介绍了如何使用Vector Davinci Configurator工具配置AUTOSAR BswM模块,实现车身控制ECU的模式管理规则。通过实战案例,从环境准备、核心概念梳理到具体配置步骤,包括ModeRequestPort、ModeCondition、Logical Expression和Rules的构建,帮助工程师快速掌握BswM配置技巧,提升汽车电子软件开发效率。

weixin_28678831的博客 352

在C++程序中调用被C编译器编译后的函数(使用extern “C“),举例详细说明

在C++程序中调用被C编译器编译后的函数(使用extern “C“),举例详细说明

qq_35320456的博客 632

若依框架整合Flowable:从零构建企业级流程中心

本文详细介绍了如何将若依框架与Flowable工作流引擎整合,构建企业级流程中心。通过环境配置、依赖添加、数据库设置等核心步骤,实现流程定义管理、任务处理服务等关键功能,并结合实际案例展示请假审批流程的实现与动态表单集成。文章还提供了性能优化和生产建议,帮助开发者高效构建稳定可靠的工作流系统。

weixin_28365523的博客 230

在C++程序中调用被C编译器编译后的函数为什么要加extern“C”?

转自https://blog.youkuaiyun.com/ygm_linux/article/details/26626893 在C++程序中调用被C编译器编译后的函数为什么要加extern“C”?在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编 译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声

weixin_45875586的博客 872

告别手动刷金币:零代码配置实现番茄小说自动化任务

本文详细介绍如何利用零代码配置工具实现番茄小说自动化任务,告别手动刷金币的烦恼。通过冰狐智能辅助工具的可视化配置和元数据复用功能,用户无需编程基础即可快速设置自动签到、观看广告等任务流程,大幅提升效率并避免断签风险。

weixin_42522953的博客 295

游戏开发实战:如何用旋转矩阵实现2D角色平滑转向(附Unity代码)

本文深入探讨了在Unity游戏开发中,如何运用旋转矩阵原理实现2D角色的平滑转向。文章从核心理论出发,提供了计算目标旋转、实现平滑插值(Lerp与SmoothDamp)的完整C#代码,并解决了与动画系统、物理引擎协同的常见难题,帮助开发者提升游戏操作手感与视觉流畅度。

weixin_29057237的博客 287

在C++程序中调用被c编译器编译后的函数,为什么要加extern "C"?

http://blog.youkuaiyun.com/co0k1984/article/details/1467904 在C++程序中调用被c编译器编译后的函数,为什么要加extern "C"? C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。 假设某个C 函数的声明如下: void foo(int x, int y); 该函数被C 编译器编译后在库中

wjh199133的专栏 1163

MIKE11实战:平原河网水动力建模从入门到精通(附GIS数据处理技巧)

本文系统介绍了MIKE11软件在平原河网水动力建模中的完整实战流程。从GIS数据预处理、河网构建、参数率定到结果分析,详细阐述了构建可靠数字孪生模型的关键步骤与技巧,旨在帮助水利工程师高效解决平原地区复杂水流模拟的挑战,为防洪决策提供科学依据。

weixin_28419039的博客 689

在C++ 程序中调用被 C编译器编译后的函数,为什么被包含 extern "C"?

在C++程序中调用被C编译器编译后的函数,为什么被包含extern "C"? C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言不同。使用extern C可以解决名字匹配问题。 ...

qq_42685292的博客 198

2025年华为杯中国研究生数学建模竞赛E题 高速列车轴承智能故障诊断问题 思路+代码

all_data, file_info = preprocessor.load_mat_files(file_list[:50]) # 加载前50个文件作为示例。[y_source, y_source, domain_labels], # 注意:这里使用伪标签。X_target = np.random.randn(100, X_source.shape[1], 1) # 示例数据。"""构建CNN-Transformer混合模型""""""构建Transformer模型"""

YOLO 1046

LoRa双端通信稳定性核心:同步字配置与LLCC68工程实践

LoRa是一种基于扩频调制的远距离低功耗无线通信技术,其物理层鲁棒性依赖于发射端与接收端在频率、带宽、扩频因子及同步字等关键参数上的严格一致。同步字作为LoRa帧结构中位于前导码之后的2字节标识字段,承担着物理层帧过滤与网络隔离的核心作用,直接影响通信成功率与抗干扰能力。在实际嵌入式开发中,尤其采用LLCC68等专用射频芯片时,同步字配置错误或双端不一致是导致‘能发不能收’‘间歇性丢包’等典型问题的首要原因。本文面向STM32等Cortex-M平台开发者,结合硬件一致性约束、驱动移植方法论与寄存器级调试手段

weixin_36019375的博客 130

在C++程序中调用被C 编译器编译后的函数,为什么要加extern “C”?

http://www.cnblogs.com/fangyukuan/archive/2010/09/18/1829871.html15.在C++程序中调用被C 编译器编译后的函数,为什么要加extern “C”?首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块...

weixin_33890499的博客 87

HTML音乐爱心3D旋转相册完整源码

HTML音乐爱心3D旋转相册完整源码

LilyCoder的博客 1380

在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?

在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?   首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数

无为 1193

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

在c++程序中调用被C编译器编译后的函数,为什么要使用extern “C”

c/c++函数调用约定:c/c++函数调用约定 一、原题: 二、详细说明: 现在,在一个工程中;有一个test.c文件;一个test1.cpp文件; //test.c #include<stdio.h> int Add(int a,int b) { return a+b; } (1)使用extern int Add(int,int);声明外部函数—–错误 //test1.cpp #include<iostream> using namespace std; exter

qinjie的博客 720

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”

C和C++的函数符号生成规则不一样。C++调用C语言,由于符号的生成规则不同会导致符号解析出错。使用extern C告诉C++编译器用C语言的规则生成符号。 例:extern "C"  {int sum(int a,int b);}//调用.c文件中的sum函数...

qq_41804181的博客 384

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern

haike2009的专栏 518

在C++程序中调用被C编译器编译后的函数为什么要加extern “C”

在C++程序中调用被C编译器编译后的函数为什么要加extern“C”?在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?   首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编   译器,其声明的函数和变量可以在本模块或其它模块中使用。   通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量

阳光梦的专栏 1万+

C++程序中调用被C编译器编译后的函数为什么要加extern “C”声明

加上extern “c”后,会指示C++编译器这段代码按C语言编译。由于C++支持函数重载,编译函数时候会把函数的参数类型和名字编译到代码中,而C不支持函数重载,编译C函数的时候只会包含函数名,没有参数类型。 C比C++出现的早,底层代码都是用C语言写的,为了更好的兼容原来的C代码和已经写好的函数库,就需要在C++中支持C,extern “c”就是来解决这个问题的。

u012681334的博客 558
上一篇: ASP.Net中Ado.Net Entity Framework实际项目应用
下一篇: SQL Server中timestamp(时间戳)
Java11257
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值