仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 765|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET编程:困扰多日的C#挪用Haskell成绩居然是Windows的一个坑仓酷云

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?比来一向被C#挪用Haskell时的“实验读取或写进受回护的内存”成绩所困扰(详见C#挪用haskell遭受Attemptedtoreadorwriteprotectedmemory,C#挪用haskell时的“实验读取或写进受回护的内存”成绩),并且困在个中,越陷超深,没法自拔,差点弃用C#办理我们面对的成绩。
成绩是如许的,只需在Haskell代码中对字符串举行操纵,在C#挪用时就会激发非常:
AnunhandledexceptionoftypeSystem.AccessViolationExceptionoccurredinUnknownModule.
Additionalinformation:Attemptedtoreadorwriteprotectedmemory.Thisisoftenanindicationthatothermemoryiscorrupt.
示例Haskell代码以下:

假如间接前往字符串,则统统一般,示例Haskell代码以下:

C#挪用示例代码:
  1. classNative{[DllImport("libpandoc",CallingConvention=CallingConvention.Cdecl,CharSet=CharSet.Unicode)]publicstaticexternIntPtrmarkdownToHtml(byte[]markdown);}publicclassProcessor{publicstringProcess(stringtext){varintPtr=Native.markdownToHtml(System.Text.Encoding.UTF8.GetBytes(text));varhtml=Marshal.PtrToStringAnsi(intPtr);returnhtml;}}
复制代码

你大概会问——吃饱撑着了,为何要用C#挪用Haskell?
没撑着!由于史上最壮大的Markdown引擎pandoc就是用Haskell开辟的,不是C#,不是Java,不是PHP,不是Python,也不是C/C++,更不是Objective-C。真正要比的不是言语,并且是用言语开辟出来的工具。
你大概要问——良多人看不起的微软家的C#能挪用高上年夜的Haskell?
固然能!并且经由了实践考证,详见经由实践考证的C#挪用Haskell的办法。固然是经由过程FFI(ForeignFunctionInterface),借助C编译成非托管的dll,但不论怎样,C#做到了。
但当我们用C#挪用Haskell办理实践成绩时,遭受了“Attemptedtoreadorwriteprotectedmemory.”成绩,重复折腾找不到办理之道,处于失望中,觉得“C#能够挪用Hakell"是一个“圈套”。
。。。
明天上午,当我们把编译好的程序从WindowsServer2008R2复制到WindowsServer2012上运转时,事业居然呈现了——运转一般,而且失掉了准确的了局。

这时候你大概又要问——不是自找贫苦吗,为何纷歧入手下手就用WindowsServer2012?
不是自找贫苦,是贫苦本人找上门的。由于编译Haskell代码必要安装HaskellPlatform(集成了ghc),而HaskellPlatform不克不及在WindowsServer2012一般安装,只能自愿在WindowsServer2008上安装(事先也被折腾了)。
切切没有想到的是,WindowsServer2008上编译出来的程序不克不及在WindowsServer2008上一般运转,却事业般地能在WindowsServer2012上能一般运转。这是否是Windows的一个坑呢?
由此想到我们在阿里云上已经遭受的“玄色10秒”成绩,是由于WindowsServer2008在WAS(WindowsProcessActivationService)中利用了spinlock,而假造化手艺对spinlock撑持欠好,终极也是经由过程换用WindowsServer2012办理了成绩。这固然不克不及说是WindowsServer2008的一个坑,但申明了一点——利用WindowsServer,2008要当心!
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-20 17:56:01 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
飘飘悠悠 该用户已被删除
板凳
发表于 2015-1-29 06:47:05 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
小女巫 该用户已被删除
地板
发表于 2015-2-5 22:00:44 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-7 20:29:42 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
因胸联盟 该用户已被删除
6#
发表于 2015-2-23 09:54:41 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
再见西城 该用户已被删除
7#
发表于 2015-3-7 07:06:26 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
谁可相欹 该用户已被删除
8#
发表于 2015-3-14 14:03:39 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
简单生活 该用户已被删除
9#
发表于 2015-3-21 09:05:40 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-15 11:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表