问题标签 [pchar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2988 浏览

delphi - PChar('') 是否保证是指向 #0 的指针(不是 nil)?

我知道在 Delphi 中,一个空字符串(AnsiString 或 WideString)可以用一个 nil 指针表示,也可以用一个指向实际空字符串的指针表示。

通过实验,我已经在 Delphi XE2(具有特定的编译器设置)中证明了这一点PChar('') <> nil。但这是否得到保证,或者它可能会在未来的版本中发生变化,或者取决于某些编译器设置?

我正面临信任危机。如果有人能给我一个明确的答案,我将不胜感激。

0 投票
2 回答
5155 浏览

string - 如何将字符串变量传递给需要 PChar 的函数?

我有这个代码:

如何用字符串变量替换第三个参数中的文字?如果我使用下面的代码,它不会编译。

0 投票
1 回答
1774 浏览

c# - 将 Delphi PChar 传递给 C#

我在 c# 环境中为 delphi 导入的 activeX 控件传输数据时遇到了一些问题。


我在 delphi 端有一个函数,它接受并返回 PChar。我可以修改它或用它做任何我想做的事情。

在程序的 C# 端是一个函数,它调用 delphi 函数,给它一个字符串参数来咀嚼。

我已经对其进行了测试,显然一切都很顺利,直到 C# 收到返回的 PChar。然后整个应用程序停止响应并退出。我尝试实现 try-catch 块以查看异常消息,但应用程序在显示任何内容之前就崩溃了。

我想它崩溃是因为变量不是同一类型。或者因为残酷的软件版本不匹配:Delphi 5 + Visual Studio 2012。我用谷歌搜索了这个,但到目前为止没有运气。

任何帮助表示赞赏:)

0 投票
3 回答
1450 浏览

delphi - ((Pointer)(P)+1)^ 什么时候可以工作?

我正在研究 delphiXE2,我正在研究 PInteger。如果我在我的德尔福代码中这样做

我得到了这个错误。

PS:testInt := (P+1)^;是第23行

但是,当我尝试这个

它运作良好!控制台可以打印'b'!

我不清楚这怎么会发生,什么时候 ((Pointer)(P)+1)^ 可以工作?

0 投票
1 回答
401 浏览

c++ - 如何在没有任何内存泄漏的情况下创建和编辑全局 PCHAR

这似乎是一个基本问题,但我无法在任何地方找到解决方案。

我必须从内核模式中获取信息。因此,我与 IOCTL 合作。我的用户模式应用程序使用 DeviceIoControl 和 METHOD_OUT_DIRECT 发送此 IOCTL,因为我需要传输大量数据。这会向我的驱动程序发送一个字符指针。

Driver 获取 IOCTL 并可以在中断请求中对其进行响应。

代码如下所示:

但我需要从内核模式的另一部分复制信息。

我试图像这样创建一个全局 PCHAR:

头文件(声明):extern PCHAR g_pDataPack;

源文件(定义):PCHAR g_pDataPack = "IOCTL DEFINITION";

编辑(其他源文件):*g_pDataPack++ = 'some stuff';

我的问题是,在中断将全局 PCHAR 复制到本地 PCHAR 并将其发送回我的用户模式应用程序之前,我必须多次编辑和放大全局 PCHAR。我试图每 5000 个版本重置一次全局指针,但这并没有真正奏效。

程序在一段特殊的时间后崩溃。我猜是因为全局指针分配了很多空间?

我试图创建一个 CHAR 数组,但这根本不起作用。

是否有另一种更好或更简单的方法来分配特殊大小的内存,然后在需要时对其进行编辑并将其复制到本地 PCHAR pReturnData,或者我是否必须学习如何为该项目使用 DMA?

0 投票
0 回答
136 浏览

windows - 我在这种自定义格式的复制和粘贴中遗漏了什么?

我的复制代码:

和我的粘贴代码:

我的目标是不仅要从我的程序中的特殊编辑器中复制文本,还要复制与该编辑器相关的一些底层变量数据。大多数一切似乎都在剪贴板方面运行良好 - 我看到了我复制的文本,并且“cf_LocalVar”格式出现在 Windows 上的剪贴簿查看器中。

当我到达粘贴端并且该行 LocalsTextPtr := GlobalLock(MyHandle);没有从代码的第一位获取复制的数据时。我看到它进入 pLclCopies 但不能确定它是否存储在剪贴板中。

注意我已经从我的代码中遗漏了空剪贴板,因为这将摆脱我需要的 cf_text 以及 cf_LocalVar。

0 投票
1 回答
1107 浏览

delphi - 如何从 delphi dll 函数返回 pchar 类型?

Vb6 代码运行时出现以下错误。

如何修复错误?

我怎样才能返回一个正常的字符串?

VB6代码

Delphi7代码

0 投票
2 回答
239 浏览

string - 我如何编写一个 Delphi 程序来修改同时适用于 PCHAR 和字符串的字符串?

举个例子,假设我想编写一个简单的过程,从字符串中删除“X”字符。

我如何设计我的程序,以便它适用于字符串和 PCHAR 参数。

如果我将其定义为:

过程 RemoveX(来源:PCHAR);

比调用 RemoveX(PCHAR(mystring)) (其中 myString 是一个字符串)将删除 'X' 但不会更新字符串长度......因此后续的 myString := myString + 'done' 将使 myString 保持不变。而且我不想在调用 RemoveX 后更改长度,我希望 RemoveX 过程能够处理所有事情。

另一方面,如果我将其定义为:

过程 RemoveX( var source : string);

我不知道如何将其传递给 PCHAR ...

0 投票
2 回答
3383 浏览

delphi - 将 PAnsiChar 分配给(unicode-)字符串的正确方法是什么?

我有一个 DLL 函数,它返回一个指向 ANSI 文本 (PAnsiChar) 的指针。我想将其分配给(unicode-)字符串(这是Delphi XE2。)。以下编译但我收到警告“W1057 Implicit String cast from 'AnsiChar' to 'string'”:

编辑:有问题的文本是英文的错误消息,所以这里不太可能有任何转换问题。

我现在很想将 Err 显式类型转换为这样的字符串......

..摆脱警告。这会出错吗?我应该改用临时 AnsiString 变量吗?

如果是,为什么?

或者我应该明确表示,代码首先将 PAnsiChar 转换为 AnsiString,然后将 AnsiString 转换为 String?

当然我可以把它变成一个函数:

所有这些选项都可以编译,但它们会起作用吗?这里的最佳做法是什么?

加分项:理想情况下,代码应该可以编译并与 Delphi 2007 和更新版本一起使用。

0 投票
2 回答
1297 浏览

string - 如何将 PChar 的一部分提取到字符串中?

在分析过程中,我遇到了一个需要花费大量时间的函数,但基本上可以归结为这段非常简单的代码:

此函数返回预期的子字符串,但对于较长的输入它不能很好地扩展。我在 CPU 视图中查看了汇编代码,据我所知(我通常不在汇编级别工作),似乎AInput在调用Copy.

但是由于此时字符串/字符数组的长度是未知的,因此转换代码必须遍历 的长度,PChar直到找到空终止符。这可以解释较长输入的可怕缩放。

但是,由于调用者传入了 的长度PChar,我最初认为可以将方法转换为使用SetString

除了SetString从零开始工作(不是从一开始的复制),在验证其输入方面似乎还有许多其他的小事情Copy,并非所有这些都记录在案(例如,任何小于 1 的起始值都会被更改到 1)。所以上面的幼稚实现并不总是像原来的那样工作。

我的目标是尽可能多地复制该Copy例程,因为此函数是库的一部分,并且已被我的同事广泛使用。

我想知道以下实现是否实现了这一点,或者我是否需要了解Copy. 注意:FLength实际长度AInput来自该函数所属模块的另一部分。我为这个例子删除了其他部分。

我使用的是 Delphi 2006,但我认为这在产品的其他版本(至少非 Unicode 版本)中并没有太大的不同。