问题标签 [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 投票
2 回答
1078 浏览

delphi - 为什么 SetString 在 Delphi(使用 Unicode)中占用更少的内存?

这是 Delphi 2009,所以 Unicode 适用。

我有一些代码将字符串从缓冲区加载到 StringList 中,如下所示:

但是在一些修改过程中,我改变了我的逻辑,所以我最终添加了相同的记录,但是作为单独而不是通过 SetString 派生的字符串,即

我注意到 StringList 的内存使用量从 52 MB 上升到大约 70 MB。增幅超过 30%。

为了恢复较低的内存使用率,我发现我必须使用 SetString 创建要添加到我的 StringList 的字符串变量,如下所示:

检查和比较 S 和 SRecord,它们在所有情况下都完全相同。但是将 SRecord 添加到 MyStringList 比添加 S 使用更多的内存。

有谁知道发生了什么以及为什么 SetString 可以节省内存?


跟进。我不认为它会,但我检查只是为了确定。

两者都不:

也不

释放多余的空间。SetString 似乎需要这样做。

0 投票
3 回答
8030 浏览

delphi - 在我的DLL中的Delphi中,我是否必须分配函数的返回pchar

我有一个 DLL,其中有一个返回 pchar 的函数。(为了避免不得不使用 borlndmm)我最初所做的是将一个字符串转换为 pchar 并返回它

但我 90% 的时间都得到了预期的结果,而其他时候我什么也得不到。

然后我开始思考我需要为 pchar 分配内存,并且我最初的方式是让 pchar 指向内存,这并不总是在最初调用函数时存在。所以我现在有了这个

但这让我不得不在我使用的程序端清理分配的内存

所以 64 美元的问题是:从 DLL 中的函数返回 PChar 时是否必须分配内存,或者我可以将其转换为 PChar 吗?

0 投票
1 回答
2976 浏览

c# - 将 Pchar Delphi DLL 导入 C#?

我在delphi中有一个程序:

该程序应将密码输出到我传入的“密码”pchar ..从我的谷歌..和阅读....参考:HEREHERE

我想出:

然后当我打电话时:

所以要输出到“pass”字符串的密码。

但我会得到 BadImageFormatException is unhandled: 尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)

听起来我使用的函数格式是错误的?我想知道我是否为 PChar 使用了不正确的 UnmanagedType,但从阅读中,它是 LPWStr 和 LPStr .. 我错过了什么吗?

提前致谢...

0 投票
2 回答
514 浏览

string - 如何正确使用 PChars 来改进此优化?

我有一个在我的应用程序中被大量调用的函数。它基本上是一个 csv 解析器,它“弹出”第一个值并将输入字符串更改为剩余的字符串。

我想尝试使用 PChars 优化这个例程。所以我想出了这个方法,但不幸的是我在结果输出中得到了奇怪的字符。我猜是因为指针不正确。

任何人都“指向”:) 我的方向正确吗?

0 投票
2 回答
1028 浏览

c++ - 将 unsigned char *buf=NULL 转换为 Pascal?

我在 Borland Delphi 工作,我在 Borland C++ Builder 中有几行代码。我想将这些行翻译成 Delphi 源代码。

…………

我想用这个 buf 分配一个 PCHar 值;

0 投票
1 回答
483 浏览

delphi - 为什么例程需要在返回后将传递给它的 PChar(字符串的类型转换)保留在内存中?

为了消除复制缓冲区的开销,您可以将字符串强制转换为 PChar(如果您确定例程不需要 PChar 保留在内存中)。 http://docwiki.embarcadero.com/RADStudio/en/Passing_a_Local_Variable_as_a_PChar

我们有一个字符串,它会一直保留在内存中,直到它的引用计数减为 0,所以它不会在作用域中被删除。那么,为什么我们需要PChar留在记忆中呢?PChar是否有一些 API 函数需要与之前传递给另一个 API 函数的完全相同的引用?

特别是我正在考虑示例代码。因此,问题必须是“为什么例程需要传递给它的 PChar(字符串的类型转换)在它返回后保留在内存中?”。异步 i/o 例程,或在调用者返回后访问传递的 pchar 的异步方法,或由另一个线程修改全局字符串都是很好的理由。

0 投票
3 回答
555 浏览

delphi - 如何让 PChar 越过十六进制 00 到达 Delphi 中的文件末尾?

我正在解析非常大的文件(Unicode - Delphi 2009),并且我有一个非常有效的例程来使用 Stackoverflow 问题中概述的 PChar 变量:在 Delphi 中解析一行的最快方法是什么?

一切都很好,直到我遇到一个包含一些嵌入式 hex:00 字符的文件。这个字符表示 PChar 字符串的结束,我的解析在该点停止。

但是,当您加载文件时,如下所示:

然后你发现文件的大小要大得多。如果您使用记事本打开文件,它会加载到文件末尾,而不是像 PChar 那样在第一个 hex:00 处停止。

如何在仍然使用 PChar 解析的同时读到文件末尾,而不会减慢我的读取/解析速度?

0 投票
3 回答
253 浏览

c++ - 通过矢量* 函数 getnameinfo

如何将 vector* 类型的变量传递给 winsock2 的 getnameinfo 函数?

面对面最好问一下如何将vector*转换为PCHAR?

0 投票
3 回答
220 浏览

string - 询问用户并在消息接收器中发回响应

我想要求用户输入密码。由于有时在与运行 VCL 的主线程不同的线程中需要密码,因此我尝试向主窗口发送一条消息并询问密码。然后主窗口询问用户。

我如何询问用户:

我如何询问主窗口:

但是Password之后PasswordBuffer是空的。我究竟做错了什么?

0 投票
2 回答
5285 浏览

delphi - 在 XE 中使用 pchar 数组作为参数调用外部 dll

我有一个在 delphi 6 中运行良好的 delphi 项目,但是当我升级到 XE 时它不起作用。我知道这与 delphi XE 中的新 unicode 类型有关,我尝试将参数的定义从 pchar 更改为 pansichar、ansichar 但到目前为止没有成功。谁能看到我做错了什么?我的项目在第三方 dll 中调用了一个函数,该函数的定义如下:

这就是我调用该函数的方式。

如果有人可以帮助我,我将不胜感激。

马里奥。