- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了advice from Rob Kennedy他的建议之一是使用 SetString
,然后将其加载到显示它的 VCL 组件中,从而大大提高了我正在开发的应用程序的速度。
我使用的是 Delphi 2009,所以现在 PChar 是 Unicode,
SetString(OutputString, PChar(Output), OutputLength.Value);
edtString.Text := edtString.Text + OutputString;
可以工作,我自己将其更改为 PChar,但由于移动的数据并不总是 Unicode,事实上它通常是 ShortString 数据......所以看看他实际给我使用的内容:
SetString(OutputString, PAnsiChar(Output), OutputLength.Value);
edtString.Text := edtString.Text + OutputString;
没有显示任何内容,但我检查了调试器,并且通常以我过去一次构建 1 个字符的方式显示的文本位于变量中。
奇怪的是,这不是我今晚第一次遇到这种情况。因为我试图想出另一种方法,所以我采纳了他的建议,我没有将其构建到 VCL 的 TCaption 中,而是将其构建到字符串变量中,然后复制它,但是当我发送它时,什么也没有显示。再次在调试器中,数据内置的变量...具有数据。
for I := 0 to OutputLength.Value - 1 do
begin
OutputString := OutputString + Char(OutputData^[I]);
end;
edtString.Text := OutputString;
上面的方法不起作用,但旧的缓慢的方法工作得很好......
for I := 0 to OutputLength.Value - 1 do
begin
edtString.Text := edtString.Text + Char(OutputData^[I]);
end;
我尝试将变量设置为 ShortString、String 和 TCaption,但没有显示任何内容。我还发现有趣的是,当我将同一数组中的十六进制数据构建到 RichEdit 中时,速度非常快,而在文本数据的编辑中进行则非常非常慢。这就是为什么我没有费心尝试更改 richedit 的代码,因为它的运行速度非常快。
编辑添加 - 我想我找到了问题,但我没有解决方案。如果我编辑调试器中的值以删除无法显示的任何内容(通过旧方法用于不显示...不失败),那么将显示我剩下的内容。因此,如果这只是摆脱变成垃圾字符的字节的问题,我该如何解决这个问题?
我基本上从 SCSI 设备传入原始数据,并以十六进制编辑器的方式显示。我最初一次添加一个字符的缓慢方式成功地显示了字符串和其中不包含 Unicode 特定字符的 Unicode 字符串。更快的方法即使工作也不会以一种方式显示 ShortStrings,而另一种方式不会显示不使用非 0-255 字符的 UnicodeStrings。我真的很喜欢并且可以使用速度提升,但如果这意味着牺牲读取字符串的能力......那么应用程序的意义何在?
EDIT3 - 好吧,现在我已经发现 0-31 是控制字符,32 及以上是有效的,我想我将尝试过滤字符并用 .这是我稍后计划模仿十六进制编辑器风格的事情。
如果有任何其他建议,我很高兴听到它们,但除此之外,我认为我可以制定一个比原始解决方案更快的解决方案,同时满足我的需要。
最佳答案
一些评论:
一些假设和建议(如果我对您问题的真正含义是正确的):
关于string - Delphi - 设置字符串和 PAnsiChar 以及其他字符串不显示的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641390/
我使用以下方法将名为“TmpData”的字节数组转换为 PAnsiChar: PAnsiChar(@TmpData[0]); 但有些数据有换行符。如何删除换行符?请看下图 最佳答案 请注意,在下面的答
这些是 C DLL 函数示例及其 Delphi 翻译: C 定义: DLL_EXPORT int AR_dll_function (const char *terminal_no, const cha
我正在 Delphi XE2 中编译我的应用程序。它是在 delphi 7 中开发的。我的代码如下: type Name = array[0..100] of PChar; PName = ^Na
当我尝试将字符串从 TMemo 控件的 Lines 传递到 PChar 数组时,出现了一些奇怪的情况。在例程结束时,数组中的最后一个字符串将被复制。我能够用这个简单的代码复制这个: procedure
这个问题已经有答案了: What is the difference between WideChar and AnsiChar? (2 个回答) 已关闭 8 年前。 我是delphi XE8的新手。
我有一个非常愚蠢的问题......为什么这段代码: PChar('x'); 导致“访问冲突”错误?编译器优化? 示例: var s: String; ... s := StrPas(PAnsiChar
我有一个包含一些数据的字节数组... CommandBytes : array of byte; 我有一个向蓝牙打印机发送命令的 VCL 功能。 VCL函数原型(prototype)是这个 SendD
我经常读到编译器在转换为 PChar 时会产生某种魔力。 . PChar的主要目的|是在期望零终止字符数组(C 风格的“字符串”)的库中调用外部代码。 PChar是 PWideChar 的别名类型关于
PAnsiChar 和 PChar 之间有区别吗?是什么类型? (德尔福2007年之前) 提前谢谢您! 最佳答案 D2009 及之后:是的,有。 PChar 是指向 Char 的指针,它是 unico
我正在使用delphi-xe3中的Windows API从这里实现Ping功能(http://delphi.about.com/od/internetintranet/l/aa081503a.htm)
我得到了advice from Rob Kennedy他的建议之一是使用 SetString,然后将其加载到显示它的 VCL 组件中,从而大大提高了我正在开发的应用程序的速度。 我使用的是 Delph
请考虑以下程序: program SO41175184; {$APPTYPE CONSOLE} uses SysUtils; function Int9999: PAnsiChar; begin
如何将 PAnsiChar 变量转换为 WideString 或 string? 最佳答案 您只需将一个变量分配给另一个变量,然后让 Delphi 编译器为您完成所有转换: var p: PAns
我正在将应用程序转换为 Delphi 2009,但遇到了一个有趣的问题,一些调用需要将字符串(宽)转换为 AnsiString。 这是一个演示我遇到的问题的示例: var s: PAnsiChar
情况:我有一个使用 UTF-8 作为其内部字符串格式的外部 DLL。接口(interface)函数都使用 PAnsiChar 来传递字符串。 我的应用程序的其余部分使用 Delphi 的原生 stri
所以问题是 Delphi 2009/2010 中的字符串文字(或常量字符串)是否可以直接转换为 PAnsiChar,或者是否需要先额外转换为 AnsiString 才能正常工作? 背景是我正在使用 C
作为新手,对于互操作和 C(++) 我确实搜索了这个问题的答案,但在 SO 或 www 上找不到。我没有选择正确的词来搜索答案,或者我错过了这个非常基本的问题的要点...... 对于 Delphi d
在 Delphi XE 中,我使用 BASS audio library ,其中包含此功能: function BASS_StreamCreateURL(url: PAnsiChar; offset:
我想使用 Delphi 代码,通过 C++ Builder 中的 DLL 导出 Delphi 代码片段是这样的 // function declare function NameData(ItemI
我知道这可能很简单,但有时 Unicode 问题会因为太多的考虑而困扰我。 我有这个代码: pcBuffer := StrAlloc(Stream.Size + 1) where pcBuffer i
我是一名优秀的程序员,十分优秀!