我对以下测试问题的可能答案有一些疑问:
问题:您编写以下代码段以使用平台调用从 Win32 应用程序编程接口 (API) 调用函数。
2 3 | string msg ="Welcome" + personName +"to club"!"; bool rc = User32API.MessageBox(0, msg, personName, 0); |
您需要定义一个可以最好地编组字符串数据的方法原型。您应该使用哪个代码段?
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [DllImport("user32", CharSet = CharSet.Ansi)] public static extern bool MessageBox(int hWnd, string text, string caption, uint type); } // B. [DllImport("user32", EntryPoint ="MessageBoxA", CharSet = CharSet.Ansi)] public static extern bool MessageBox(int hWnd, [MarshalAs(UnmanagedType.LPWStr)]string text, [MarshalAs(UnmanagedType.LPWStr)]string caption, uint type); } // C. - Correct answer [DllImport("user32", CharSet = CharSet.Unicode)] public static extern bool MessageBox(int hWnd, string text, string caption, uint type); } // D. [DllImport("user32", EntryPoint ="MessageBoxA", CharSet = CharSet.Unicode)] public static extern bool MessageBox(int hWnd, [MarshalAs(UnmanagedType.LPWStr)]string text, [MarshalAs(UnmanagedType.LPWStr)]string caption, uint type); } |
为什么正确答案是 C?难道不是A也一样吗?唯一的区别是它将是 ANSI 而不是 Unicode。
我知道它不可能是 D,因为我们选择 Unicode 作为字符集,然后将 ANSI 函数作为入口点。
为什么B不工作?
这个字符串被这个问题所问的确切问题弄乱了。毫无疑问,它在原版中看起来像这样:
??往往是一个问题,它的字符代码不在 ASCII 字符集中,并且可能不受默认系统代码页的支持。当您调用 ANSI 版本的 MessageBox(又名 MessageBoxA)时使用的是什么。真正的函数是 MessageBoxW,它采用 utf-16 编码的 Unicode 字符串。
MessageBoxA 是旧版本的 Windows 中使用的遗留函数,早在过去,程序仍然使用 8 位字符串。它并没有完全消失,许多 C 和 C 程序仍然倾向于使用 8 位编码。 MessagBoxA 是通过将 8 位编码字符串转换为 Unicode,然后调用 MessageBoxW 来实现的。如果你一开始就有一个 Unicode 字符串,那么 With 会很慢而且有损。
所以给4个版本打分:
A:使用 MessageBoxA 8 位编码,有风险。
B:使用 MessageBoxA Unicode,失败。
C:使用 MessageBoxW Unicode,不错
D:使用 MessageBoxA Unicode,失败。
由于选项 B 和 D 确实另有指示,因此
剩下 A 和 C。选项 A 调用函数
现在,您可以使用 A 或 C,但不同之处在于使用选项 A 您将传递 ANSI 编码的文本。如果您传递的文本包含无法以 ANSI 编码的字符,则会丢失信息。这就是为什么首选 C 的原因。它将始终收到与 .net 调用代码中存在的完全相同的文本。
我怀疑答案在
我认为它没有正确复制粘贴到您的问题中。
注意
无论如何,Unicode 可以处理比 ANSI 更多的格式,所以它是一个更好的默认选择。
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
我遇到了一个非常困难的时期:#containedwithin:"MA\u008EEIKIAI"#shouldbe"MAŽEIKIAI"#natureofstring$pstring3"MA\u008EEIKIAI"$putsstring3MAEIKIAI$string3.inspect"\"MA\\u008EEIKIAI\""$string3.bytes#关于从哪里开始的任何想法?注意:这不是我的previousquestion的副本. 最佳答案 \u008E表示代码点为8e(十六进制)的unicode字符出现在字符串中的那个位置。
不幸的是,Unicode0.1(sudogeminstallunicode)不能在Ruby1.9上运行。我有以下片段:require"rubygems"require"unicode"str="áéíóúç"Unicode.normalize_KD(str).gsub(/[^\x00-\x7F]/n,"")#=>aeiouc我用它来将标题转换为永久链接,而不删除重音字符。有没有办法使用pack或unpack方法转换此类文本? 最佳答案 更新:更好的选择可能是使用gemunicode_utils这是专门为这些缺失的功能创建的:requ
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
我正在编写一个Rails应用程序,它需要将IDN域名从Punycode转换为它的Unicode等效项。我尝试安装idngem绑定(bind)到GNULibIDN,但它不会编译native代码。显然others与Ruby1.9.x有同样的问题。我也试过纯RubySimpleIDNgem,但我更喜欢本地的东西。 最佳答案 试试simpleidngem.它适用于Ruby1.8.7和1.9.2。编辑你的Gemfile:gem'simpleidn'然后可以输入如下命令:SimpleIDN.to_unicode("xn--mllerriis-l
我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案