- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请原谅这个愚蠢的问题,但我很困惑。考虑以下方法(抱歉有吵闹的评论,这是正在开发的真实代码):
function HLanguages.GetISO639LangName(Index: Integer): string;
const
MaxIso639LangName = 9; { see msdn.microsoft.com/en-us/library/windows/desktop/dd373848 }
var
LCData: array[0..MaxIso639LangName-1] of Char;
Length: Integer;
begin
{ TODO : GetLocaleStr sucks, write proper implementation }
//Result := GetLocaleStr(LocaleID[Index], LOCALE_SISO639LANGNAME, '??');
Length := GetLocaleInfo(LocaleID[Index], LOCALE_SISO639LANGNAME, @LCData, System.Length(LCData));
Win32Check(Length <> 0);
SetString(Result, @LCData, Length); // "E2008 Incompatible types" here, but why?
end;
如果我删除引用运算符,则来自 $X+
的隐式转换将发挥作用并编译方法。为什么编译器拒绝这个带有引用运算符的代码超出了我的理解。
这是 Delphi XE2,此行为可能是它特有的。
<小时/>如果我在 HLanguages.GetISO639LangName
范围内添加一个具有等效原型(prototype)的测试用例虚拟作为内在原型(prototype),此错误将神奇地消失:
procedure SetString(var s: string; buffer: PChar; len: Integer);
begin
{ test case dummy }
end;
最佳答案
您必须将其显式转换为 PChar
:
SetString(result,PChar(@LCData),Length);
正如您所说,SetString()
对第二个参数类型的要求非常高。它必须是 PChar
或 PWideChar
或 PAnsiChar
,具体取决于字符串类型本身。
我怀疑这是由于 SetString()
被定义为重载了 string
、WideString
或AnsiString
作为第一个参数。因此,为了验证正确的签名,需要所有参数类型完全匹配:
SetString(var s: string; buf: PChar; len: integer); overload;
SetString(var s: AnsiString; buf: PAnsiChar; len: integer); overload;
SetString(var s: WideString; buf: PWideChar; len: integer); overload;
当然,所有这些都是“内在的”,所以你不会在system.pas中找到这样的定义,而是直接像_LStrFromPCharLen() _UStrFromPCharLen() _WStrFromPWCharLen()
这样的过程。
此行为自 Delphi 的早期版本以来都是相同的,并且不是 XE2 中的回归。
关于delphi - 为什么 SetString 内在函数可能会导致 PChar 参数出现 "Incompatible types"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614737/
我对编程很陌生,但我正在为后台应用程序制作一个屏幕。此应用程序的目标是您可以选择车站名称,当您按检查状态时,会显示该车站上储物柜的所有状态。但我遇到的问题是 setString 由于某些奇怪的原因不起
我有两个表“Table1”,其中包含 user_name、Password 和类(class) ID 列,另一个表“course”包含 course_id、course_name 列。我使用以下代码根
我有一个这样的结构: type ProductionInfo struct { StructA []Entry } type Entry struct { Field1 string
背景 我正在尝试将 ArrayList 的内容设置到 Db2 SQL 语句中的 IN 子句中。我正在使用 PreparedStatement 来构建我的查询。 这是我们的编码标准。 我尝试过的#1 我
我正在编写一个调用 MSSQL 数据库中的存储过程的方法。存储过程有 4 个输入,全是数字。我使用 setString() 输入存储过程的参数。 我收到以下编译错误 no suitable metho
我有以下情况... 我使用 java.sql 包中的 CallableStatement。当我在执行存储过程之前使用 setDate 函数时,出现错误: Cannot find symbol symb
我在 for 循环中使用 setString 时遇到问题。 我有这一行要插入到我的数据库中的表中 12.S777.V77.D88.wagon/1.Train/889 和777代表二等舱的乘客数量。问题
这可能非常简单,但我不明白出了什么问题。 作为背景,我将PreparedStatements 与模板查询一起使用以提高效率。我调用 setString(index, argument) 来填充模板的部
我有一个带有文本列的表格,我想搜索包含单词的所有行 String sql="Select text from MyTable where text REGEXP '[[::]]' myPrep
我尝试使用 SetString 将值设置为字符串,但是当我尝试通过 GetString() 获取它时,出现了一些随机输出。代码: someDoc[someObjKey].AddMember(someS
我有以下代码来设置默认值: int main() { try { sql::Driver *driver; sql::Connection *con;
我是通过 tableView 创建的字体列表,当用户选择任何单元格时,字体字符串应该根据单元格进行更改,但我不知道为什么我的代码不起作用!我的 tableview 使用 UIPopOverViewCo
我有一个包含六个“?”的准备好的声明在里面。并且在所有地方都将替换为相同的字符串。 应该首选以下两种方法中的哪一种: pstmt = con.prepareStatement(QUERY.replac
我正在尝试在 cocos2d-x 中设置标签的值。如果我将它们添加到字符串的开头或结尾,它不会显示空格,例如 label->setString("10 10"); 正常工作。但是如果我使用 label
我有一个 Java 应用程序,对通过网络接收的 UTF-8 编码的 String 进行解码,并将其保存到我的数据库 (SQL Server 2000) 中的 varchar 列中。我使用 JDBC 的
我们以这种方式使用 SqlDataRecord(为清楚起见,只显示了一个字段): SqlMetaData[] metaData = new SqlMetaData[1]; metaData[0] =
我遇到了以下代码,我觉得它做错了: (请注意,这是 JDK 1.4.2,因此未输入列表) StringBuffer queryBuffer = new StringBuffer(); ArrayLis
如标题所示:可以肯定的是,我正在调试我的应用程序,因此在我将字符串放入 PreparedStatement 变量的地方,特殊字符变为“?”。我实际上不知道在哪里搜索应该修复它的东西,所以我不知道是否需
这个问题在这里已经有了答案: Using Prepared Statements to set Table Name (8 个答案) 关闭 9 年前。 我正在尝试使用具有类似于以下代码的 Prepa
我是 Cocoa 的新手,我遇到了一个绝对令人抓狂的问题。我正在尝试将一个简单的 NSString 写入 NSTextView,但由于某种原因它不会响应。没有编译器警告,没有运行时错误,只是一个空白的
我是一名优秀的程序员,十分优秀!