问题标签 [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 回答
215 浏览

delphi - delphi 在运行时修改 pchar

我需要在运行时修改 pchar 字符串。帮我处理这段代码:

现在我在 Delphi 7 中有例外!我的项目没有使用本机 pascal 字符串(没有任何 windows.pas 类和其他)

0 投票
1 回答
545 浏览

c# - 如何将包含 C# 中的文件路径的字符串传递给需要 PChar 参数的 Pascal DLL 中的函数?

如何将包含来自 C# 的文件路径的字符串传递给需要 PChar 参数的 Pascal DLL 中的函数?

Pascal DLL 有一个“FileExists”调用,用于检查参数 (AFile: PChar) 是否作为文件存在。我已经成功导入了 dll,如下所示:

并声明函数如下:

然后在帕斯卡:

但是当我这样调用函数时:

Dll 不对文件进行操作(它必须被编辑并且它是一个 xml 文件)。

dll是一个机构官方提供的,所以不能编辑,我已经减少了代码,但是dll是正确的。

0 投票
1 回答
2675 浏览

delphi - 从 Delphi DLL 传递 PChar

我如何从 DLL 传递 pchar?dll 必须与其他应用程序兼容,而不仅仅是 delphi。帮助中写道,将指针传递给局部变量是危险的,如果我们将此变量设为全局变量,代码将不是线程安全的。

我们可以安全地传递一个宽字符串,但在这种情况下,dll 将与其他(非 Delphi)应用程序不兼容。

0 投票
1 回答
521 浏览

delphi - delphi调用delphi dll内存泄漏导致pchar

因此,让我们来了解一下 dll。

如果要将字符串传递给 dll 调用,则必须使过程输入 PChar。否则你会得到数据curroption。

所以我们说我们的dll有

这很好。现在让我们看看我们在 dll dpr 中声明的内容:

好吧,在 Dll 中,我们有一个 Form,其中有一个 FireDacConnection,但其中的任何组件或对象都可以完成工作。

问题是这个 PChar 被释放了两次并导致内存泄漏。我找不到在不导致内存泄漏的情况下通过 PChar 的方法。

你可以使用 fastmm,我使用 eurukalog,它写道

|+Leak #2: Type=UnicodeString: Ref count - 1, Content: "\r\n"; 总大小=18;计数=1 |

为什么 Unicode 字符串的 Ref 计数为 -1?如何预防?如何正确传递 Unicode 字符串?

我尝试过:将其作为 const 传递。复制它(如示例和 strpcopy 和 strcopy)使用局部变量来保存 PChar 的副本。

编辑:添加调用代码:

添加泄漏日志转储

|+Leak #2: Type=UnicodeString: Ref count - 1, Content: "\r\n"; 总大小=18;计数=1 | |------------------------------------------------- -------------------------------------------------- --------------------------------------------------| |00000002|04 |00000000|01D79D9C|outDll.dll|00009D9C|系统
| |_NewUnicodeString |23897[6] | |00000002|04 |00000000|008A11BC|myapp.exe |004A11BC|调用者
|TForm2 |Button4单击 |66[2] | |00000002|04 |00000000|00641C13|myapp.exe |00241C13|Vcl.Controls |TControl |单击 |7348[9] | |00000002|04 |00000000|00646172|myapp.exe |00246172|Vcl.Controls |TWinControl |WndProc |10038[153] | |00000002|04 |00000000|0065B71C|myapp.exe |0025B71C|Vcl.StdCtrls |TButtonControl|WndProc |5163[13] | |00000002|04 |00000000|006462D7|myapp.exe |002462D7|Vcl.Controls | |DoControlMsg |10107[12] | |00000002|04 |00000000|00646172|myapp.exe |00246172|Vcl.Controls |TWinControl |WndProc |10038[153] | |00000002|04 |00000000|0070B240|myapp.exe |0030B240|Vcl.Forms
|TCustomForm |WndProc |4427[206] | |00000002|04 |00000000|006457AC|myapp.exe |002457AC|Vcl.Controls |TWinControl |MainWndProc |9750[3] | |00000002|04 |00000000|004F7614|myapp.exe |000F7614|System.Classes| |StdWndProc
|16600[8] | |00000002|03 |00000000|768162F7|user32.dll
|000162F7|USER32 | | (可能有间隙fnScSendMessage+815)| | |00000002|03
|00000000|76816D35|user32.dll |00016D35|USER32 |
| (可能 GetThreadDesktop+210)| | |00000002|03
|00000000|76816DE8|user32.dll |00016DE8|USER32 |
| (可能 GetThreadDesktop+389) | | |00000002|03
|00000000|76816E49|user32.dll |00016E49|USER32 |
| (可能 GetThreadDesktop+486)| | |00000002|03
|00000000|77420107|ntdll.dll |00010107|ntdll |
|KiUserCallbackDispatcher | | |00000002|03
|00000000|768196D0|user32.dll |000196D0|USER32 |
|发送信息W | | |00000002|03
|00000000|71AB459B|comctl32.dll |000A459B|comctl32 |
|加载图标度量 | | |00000002|03
|00000000|71AB45FE|comctl32.dll |000A45FE|comctl32 |
|加载图标度量 | | |00000002|03
|00000000|71AB4488|comctl32.dll |000A4488|comctl32 |
|加载图标度量 | | |00000002|03
|00000000|768162F7|user32.dll |000162F7|USER32 |
| (可能有间隙fnScSendMessage+815)| | |00000002|03
|00000000|76816D35|user32.dll |00016D35|USER32 |
| (可能 GetThreadDesktop+210)| | |00000002|03
|00000000|76820D32|user32.dll |00020D32|USER32 |
| (可能的 GetClientRect+192)| | |00000002|03
|00000000|76820D56|user32.dll |00020D56|USER32 |
|CallWindowProcW | | |00000002|04
|00000000|00646282|myapp.exe |00246282|Vcl.Controls |TWinControl
|DefaultHandler |10079[30] | |00000002|04
|00000000|00646172|myapp.exe |00246172|Vcl.Controls |TWinControl
|WndProc |10038[153] | |00000002|04
|00000000|0065B71C|myapp.exe |0025B71C|Vcl.StdCtrls |TButtonControl|WndProc |5163[13] | |00000002|04 |00000000|004F7614|myapp.exe |000F7614|System.Classes| |StdWndProc
|16600[8] | |00000002|03 |00000000|768162F7|user32.dll
|000162F7|USER32 | | (可能有间隙fnScSendMessage+815)| | |00000002|03
|00000000|76816D35|user32.dll |00016D35|USER32 |
| (可能 GetThreadDesktop+210)| | |00000002|03
|00000000|768177CE|user32.dll |000177CE|USER32 |
| (可能 CharPrevW+314) | | |00000002|03
|00000000|76817893|user32.dll |00017893|USER32 |

|调度消息W | |

抱歉不清楚,我不知道如何在 stackoverflow 编辑器中保留标签。

0 投票
1 回答
639 浏览

delphi - Delphi DLL PChar

sharedMemory 的这种限制是实际的吗?我已经传递给 DLL 字符串长度大约 370 个字符,并且 DLL 读取它没有问题。

我在问,因为我将 PChar 从 DLL 返回到 EXE 程序。在 DLL 中我使用 GetMem() 函数,在 EXE 程序中我使用 FreeMem() 函数,并且

我可以写访问冲突 - 我调用导出的函数,我在其中使用构造函数,它可能会崩溃。

当我从 Exec 中删除 FreeMem 时,此 AV 未显示。也不总是显示,它取决于 PChar 变量中的字符:

255 xa - 可以通过,但 ąłćłąłłąłść łąśććłłć :// 可能会崩溃。

示例 - 在 DLL 中创建消息:

在 Exec freemem 中:

0 投票
2 回答
49 浏览

c# - 在 C# 中调用 VisualBasic DLL 有效,但如何替换 Pchar?

我有一个用 VisualBasic 编写的旧 DLL,需要用 C# 调用函数。15 个函数中有 14 个已经在运行(使用控制台项目测试)。剩余的函数有一个参数 PChar,我不知道如何在 C# 中调用它。

一个工作函数如下所示:

不工作的函数有两个参数: 1. out pData: PChar 2. const pDataLen(这是返回的数据长度)

VB DLL 的手册说在调用函数之前保留内存并在函数完成后释放内存很重要。20 个字符应该足够了。

有人可以给我一个提示如何调用该函数吗?当我简单地使用“字符串”时,我得到一个异常:发生类型 System.AccesViolationException 的未处理异常。附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

感谢帮助。

0 投票
1 回答
509 浏览

c# - 将字符串从 Delphi 传递到 C# 返回 null。但是,当我从 Delphi 调用 Delphi lib 时,它工作正常。如何从 Delphi 接收字符串

我对 Delphi 完全陌生,并且一直在尝试为 .NET 制作一些 DLL。

我想要实现的是从我的 DLL 发送和接收 txt 输出。

这是我到目前为止所做的:

Delphi库函数:

这是我在 Delphi 中的调用函数:

这适用于 Delphi 到 Delphi。但是当我尝试从 C# 调用它时,收到的输出为空。

这是我的 C# 代码块:

然后在 Main 我这样称呼它:

0 投票
1 回答
336 浏览

python - 在我的 Python 脚本中从 Delphi DLL 获取 PChar 参数

假设我在 DLL 中有这个函数

在我的 Delphi 程序中,我这样称呼它

它工作得很好。现在我想从 Python 脚本中调用该函数。

我得到一个错误

ctypes.ArgumentError: 参数 2: : 错误类型

所以我的问题是:Delphi 中 AllocMem 的 Python 等价物是什么。我必须准确地说,当然所有代码都是例如,在“现实生活”中,我无法访问 DLL 中的 Delphi 代码。

0 投票
0 回答
608 浏览

python - 如何从捕获的文件中确定吞吐量/带宽

我需要根据数据包捕获确定 TCP 客户端/服务器之间可用的吞吐量。

如果有人指出允许我从 pcap 文件中提取吞吐量或网络带宽并将其保存为 csv、txt 等格式的脚本或工具,我将不胜感激。

任何帮助将不胜感激劳拉

0 投票
1 回答
98 浏览

c - 如何将 PCHAR* 转换为 TCHAR*?

我正在寻找将 PCHAR* 变量转换为 TCHAR* 的方法,而不会在 Visual Studio 中出现任何警告(这是一项要求)?在网上看,我找不到没有警告的功能或方法。也许有人遇到过类似的事情?

谢谢 !