c#与IronPython Clojure-clr的调用】的更多相关文章

工程环境搭建: 下载luainterface-1.5.3.zip文件,使用到的dll为Built目录下的LuaInterface.dll.lua51.dll.luanet.dll LuaInterface.dll为C#的dll,需要引用到工程中 lua51.dll.luanet.dll为C++的dll,需要拷贝到工程的输出目录下(Debug) C#调用Lua需要使用:LuaInterface.dll和lua51.dll Lua调用C#的类需要使用:LuaInterface.dll和luanet.…
1.线程栈 window的一个进程加载clr.该进程可能含有多个线程,线程创建的时候会分配1MB的栈空间. 如图: void Method() { string name="zhangsan";  //name 被放入栈里面 Method2(name);  //1参数变量s 被压入栈,s引用name的地址    2.返回地址被压入栈,方法执行完(method2的 return)指针指向此返回地址 return; } void Method2(string s) { int32 leng…
方法代表在类型或类型的实例上执行某些操作的代码.在类型上执行操作,称为静态方法:在类型的实例上执行操作,称为非静态方法.任何方法都有一个名称.一个签名和一个返回值(可以是void). CLR允许一个类型定义多个同名方法,只要每个方法都有一组不同的参数或者一个不同的返回值.所以,完全可以定义两个同名.同参数的方法,只要两者的返回类型不同.但是,除了IL汇编语言,我没有发现任何一个利用了这个“特点”的语言.大多数语言,在判断方法的唯一性是,除了方法名之外,都只以参数为依据,方法的返回类型会被忽略.…
C# DLL源码 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; namespace Common { public class SimpleHash { public string HashCalc(byte[] audioBuffer, byte[] key) { ...... return result; } } } 需要在IronP…
Clojure,这是什么鬼?一门基于JVM(现在也有基于.NET CLR的了:Clojure CLR) 的函数式编程语言.在JVM平台运行的时候,会被编译为JVM的字节码进行运算..为什么要学它?其设计思想独特.有何先进独特之处?后面我会讲. 说实话,现在编程语言满天飞,哥也只是玩过C/C++/Basic/C#/javascript/Java/Python,,哥最喜欢的语言么?看平台了.Windows是C#,跨平台Java,脚本Python.其它的,比如: “最纯的函数式语言”Haskell.“…
http://ironpython.net/documentation/dotnet/这是原文地址 以下笔记仅记录阅读过程中我认为有必要记录的内容,大多数都是依赖翻译软件的机翻,配合个人对代码的理解写出的笔记,个别不是很确定的,会在句首标注   猜测: 另外,这篇文档,也就是官方文档中其实只讲了怎么在Python里用.Net,感觉这篇文档是写给Python开发者看的,但是很奇怪,在百度上也能搜到在.Net中使用Python的例子,不知道那些人的资料是从哪里得来的,我搜遍了官网提供的所有文档和wi…
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序.关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结. 直接通过Runtime进行调用 我们知道,在Java中如果需要调用第三方程序,可以直接通过Runtime实现,这…
1.基本例子 ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者宏调用,其他的都作为参数 ; 下面这个函数用于设置当前的命名空间 (ns test) ; 更多基本的例子: ; str 函数会用它所有的参数创造一个字符串 (str "Hello" " " "World") ; => "Hello World"…
C#编译一个dll,比如命名空间为Csharp,里面有个类A,字段x,产生一个Csharp.dll C++ 配置,让C++支持CLR C++调用方法: #include <iostream> #using "Csharp.dll"//#using 调用dll using namespace Csharp;//命令空间 int main() {     A ^a = gcnew A();   // 当分配内存时注意使用gcnew,需要gc来给其分配内存.托管对象需要使用^来进…
#1 垃圾回收平台的基本工作原理: 访问一个资源所需的具体步骤: 1)调用IL指令newobj,为代表资源的类型分配内存.在C#中使用new操作符,编译器就会自动生成该指令.2)初始化内存,设置资源的初始状态,使资源可用.类型的实例构造器负责设置该初始状态.3)访问类型的成员(可根据需要反复)来使用资源.4)摧毁资源的状态以进行清理.正确清理资源的代码要放在Finalize, Dispose和Close方法.5)释放内存.垃圾回收器独自负责这一步. 托管堆如何知道应用程序不再用一个对象? 托管堆…
第I部分 CLR基础第1章 CLR的执行模型 31.1 将源代码编译成托管模块 31.2 将托管模块合并成程序集 61.3 加载公共语言运行时 81.4 执行程序集的代码 101.4.1 IL和验证 151.4.2 不安全的代码 161.5 本地代码生成器:NGen.exe 181.6 Framework类库 201.7 通用类型系统 221.8 公共语言规范 241.9 与非托管代码的互操作性 28第2章 生成.打包.部署和管理应用程序及类型 292.1 .NET Framework部署目标…
编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1;   等价于: int a = 1; 这种语法不仅增强了代码的可读性,其生成的IL代码与使用System.Int32时生成的IL代码是完全一致的.   编译器直接支持的数据类型称为基元类型(primitive type).基元类型直接映射到Framework类库(FCL)中存在的类型.如C#中,i…
第一部分 CLR基础 CLR和JIT “运行时”如何解析类型引用 第二部分 设计类型 使用C#的is和as操作符来转型 运行时的相互联系 基元类型.引用类型和值类型 值类型的装箱和拆箱 哈希码 dynamic基元类型 类型各种成员 CLR如何调用虚方法.属性和事件 第三部分 基本类型 第四部分 核心机制 第五部分 线程处理…
一:自己的感悟 今天读到<CLR via C#>的异常和状态管理这一章,作者给出了关于异常处理的诸多建议,里面有一些建议自己深有体会,比如说使用可靠性换取开发效率这一节.之前自己对异常怎么处理也有过自己的思考,归纳了一下主要有以下几点: 1.不要什么异常都捕捉,只有在自己不确定这段代码会不会有问题时才去捕捉异常,大部分的异常应该在开发测试阶段就消灭 2.异常在没有发生时异常对程序的效率没什么影响,一旦发生异常程序的效率的就会下降好几倍 以上就是自己在写程序时对异常的处理,虽然比较了解.NET的…
什么是托管代码?       托管代码是可以使用20多种支持Microsoft .NET Framework的高级语言编写的代码,这些语言包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++.所有的语言共享统一的类库集合,并能被编码成为中间语言(IL).运行库编译器(runtime-aware Compiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃…
相比我们传统的 c ,java ,python ,javascript等,Clojure的语法比较特别,初一看,还可能会有些不适应. 本文来介绍下Clojure的语法特点. 一.表达式 所有的Clojure代码都是由表达式组成的,每个表达式都会产生一个值. 常见的表达式如: 60 [2  4  6] (+ 1 2) (average [2 3 4]) 1)上面的第一个表达式就是一个字面常量,这里是一个整数. 2)第二个是个整数序列. 3)第3和4 都是函数调用,Clojure中,小括号 () 表…
某个项目中涉及到这样一个情景: VB/C#写的原始项目要调用Python的一些方法完成特殊的操作, 那么这就涉及到了,在.Net Framework中如何调用Python的脚本方法. 具体步骤流程如下所示: 1): 展示一个简单的Python代码,即传递一个参数,然后返回修改后字符串,此文件名称为 mytest.py def MyTestFunction(name): return "testing " + name 2): 我们借助第三方的工具来实现这个操作,那么这个第三方工具就是…
Contents 第1章CLR的执行模型... 4 1.1将源代码编译成托管代码模块... 4 1.2 将托管模块合并成程序集... 6 1.3加载公共语言运行时... 7 1.4执行程序集的代码... 8 1.5本地代码生成器:NGen.exe. 11 1.6 Framework类库... 11 1.7通用数据类型... 12 1.8公共语言规范... 12 第2章 生成.打包.部署和管理应用程序及类型... 13 2.1 .Net Framework部署目标... 13 2.2将类型生成到模…
 综述 : 本文章介绍.Net 环境下C# 通过托管C++调用本地C++ Dll文件, 示例环境为:VS2010, .Net4.0, Win7. 具体事例为测试C++, C#, 及C#调用本地C++Dll文件进行浮点运算效率的一部分. 如果需要查看三者的效率, 请继续阅读下面的文章. a 创建本地CPP类库 1. 创建本地CPP的Dll ---->EfficiencyNativeCPPDLL 2. 点击下一步 注意选择为DLL(D)项, 然后选择完成. 3.书写DLL文件 3.1 Efficie…
一.CLR CLR:即公共语言运行时(Common Language Runtime),是中间语言(IL)的运行时环境,负责将编译生成的MSIL编译成计算机可以识别的机器码,负责资源管理(内存分配和垃圾回收等). 可能有人会提问:为什么不直接编译成机器码,而要先编译成IL,然后在编译成机器码呢? 原因是:计算机的操作系统不同(分为32位和64位),接受的计算机指令也是不同的,在不同的操作系统中就要进行不同的编译,写出的代码在不同的操作系统中要进行不同的修改.中间增加了IL层,不管是什么操作系统,…
6.1 类型的各种成员 6.2 类型的可见性 public 全部可见 internal 程序集内可见(如忽略,默认为internal) 可通过设定友元程序集,允许其它程序集访问该程序集中的所有internal 类型.例如想允许强命名"Microsoft"程序集访问本程序集内的internal类型: using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Microsoft,PublicKey=…
本章要讨论托管应用程序如何构造新对象,托管堆如何控制这些对象的生存期,以及如何回收这些对象的内存.简单地说,本章要解释clr中的垃圾回收期是如何工作的,还要解释相关的性能问题.另外,本章讨论了如何设计应用程序来最有效地使用内存. 托管堆基础 每个程序都要使用这样或那样的资源,包括文件.内存缓冲区.屏幕空间.网络连接.数据库资源等.事实上,在面向对象的环境中,每个类型都代表可提供程序使用的一种资源.要使用这些资源,必须为代表资源的类型分配内存.以下是访问一个资源所需的步骤 1 调用IL指令newo…
1.嵌套类,就是定义在类中的类:嵌套类可以访问外部类的方法.属性.字段而不管访问修饰符的限制,但是外部类只能够访问修饰符为public.internal的嵌套类的字段.方法.属性: 2.CLR如何调用虚方法.属性和事件: IL提供两个方法调用指令:call和callvirt. call调用静态方法.实例方法和虚方法:callvirt调用实例方法和虚方法,不能调用静态方法: call关心的是编译时类型:callvirt关心的是运行时类型:所以,用callvirt调用虚方法时,CLR要调查发生调用的…
Cp6类型和成员基础 成员 常量:字段(静态字段和实例字段):实例构造器:类型构造器(用于静态字段的构造):方法(静态方法和实例方法):操作符重载(本质是一个方法):转换操作符:属性(本质还是方法):事件(委托):类型(嵌套类): 类型的可见性 public,private,protected,internal,sealed,默认的类是internal. 友元程序集 这部分看看就行了 成员的可访问性 private protected(对应clr是Family),internal(对应clr是a…
最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基础..NET Framework不是凭空出来的,实际上API,COM+,和一些相关驱动依然是它的基石..NET Framework只不过是对这些前辈们进行了系统的封装和扩充,在这个过程中,吸取了Java框架的很多经验.关于Win32 API与.NET Framework API的对应关系,可以参考Microsoft Win32 to Microsoft .NET Framework API Map 菜谱:除了蓝色部分以外,其…
类型的各种成员 类型可以定义以下种类的成员 1 常量 常量是指出数据值恒定不变的符号.这种符号使代码更易阅读和维护.常量总与类型管理,不与类型的实例管理.常量逻辑上总是静态成员. 2 字段 字段表示只读或可读.可写的数据值.字段可以是静态的,这种字段被认为是类型状态的一部分.字段也可以是实例(非静态),这种字段被认为是对象状态的一部分.强烈建议将字段声明为私有,防止类型或对象的状态被类型外部的代码破坏 3 实例构造器 实例构造器是将新对象的实例字段初始化为良好初始状态的特殊方法. 4 类型构造器…
From: http://msdn.microsoft.com/zh-cn/magazine/cc164193.aspx http://msdn.microsoft.com/en-us/magazine/cc164193.aspx Code download available at: CLRInsideOut2008_01.exe (1269 KB) CLR 完全介绍 托管代码与非托管代码之间的封送处理 Yi Zhang and Xiaoying Guo  目录 [InAttribute] 和…
当在REPL环境中尝试调试template的时候,会发现每次都需要重启REPL才能看到最新的变化.调查后发现,原来是每次启动REPL的时候,原来的template文件都被放到了target目录中,这样Clojure每次都会调用target中的原始模板,而不去理会模板是否已经发生变化(目录结构如下图所示,项目名称被我马赛克了…). 要解决这个问题也很简单,当启动REPL后,将target中的模板文件删除,这样就会强迫Clojure每次都调用最新的模板了.…
文章目录: 异常概述 CLR中的异常处理机制 CLR中异常的核心类System.Exception类 异常处理的设计规范和最佳实践 异常处理的性能问题 其他拓展 1.异常概述 异常我们通常指的是行动成员(例如类实例对象)没有完成所宣称的行动或任务. 例如下图中代码,返回 "Lmc"这个字符串的第二个字符的大写是否为 "M",假如这个执行过程中任何一个步骤出错,都应该返回一个状态(例如"L".Substring(1,1)会因为字符串索引不够长而出现…
前言 好记性不如烂“笔头”系列... 目录 类型基础 基元类型.引用类型和值类型 类型与成员 常量与字段 方法 类型基础 “运行时”要求每个类型最终都从System.Object 类型派生. 由于所有类型最终都从System.Object 派生,所以可以保证每个类型的每个对象都有一组最基本的方法.具体地说,System.Object 类型提供了下列的公共实例方法: 公共方法名称 说明 Equals 如果两个对象具有相同的值,就返回true. GetHashCode 返回对象的值的一个哈希码. T…