Delphi中从C DLL获取字符串返回值

2023-12-25

我有一个用 C 编写的遗留 DLL,其中包含一个返回字符串的函数,我需要从 Delphi 访问该函数。我所掌握的有关 DLL 的唯一信息是用于访问该函数的 VB 声明:

公开声明函数 DecryptStr Lib "strlib" (Str As String) As String

我尝试了以下方法但没有成功:

宣言:

function DecryptStr(s: PChar): PChar; cdecl; external 'strlib.dll';

Usage:

var
  p1, p2 : pchar;
begin
  GetMem( p1, 255 );
  StrPCopy( p2, 'some string to decrypt' );
  p1 := DecryptStr( p2 );
end;

这始终会导致 DLL 因访问冲突而崩溃。我不知所措。

有什么建议 ?


考虑重写您的测试代码,如下所示:

var
  p1, p2 : pchar;
begin
  GetMem( p1, 255 ); // initialize
  GetMem( p2, 255 );
  StrPLCopy( p2, 'some string to decrypt', 255 ); // prevent buffer overrun
  StrPLCopy( p1, DecryptStr( p2 ), 255); // make a copy since dll will free its internal buffer
end;

如果调用 DecryptStr 仍然失败,则阅读http://support.microsoft.com/kb/187912 http://support.microsoft.com/kb/187912小心。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi中从C DLL获取字符串返回值 的相关文章

随机推荐

  • 为什么 Android 的进度对话框中没有取消按钮?

    我正面临着类似的令人头疼的时刻这个人 http groups google com group android developers browse thread thread cdae98b7832b4754 567ffa7107a73f7
  • ActionView::缺少模板

    将 mysite 部署到 VPS 后 我遇到此运行时错误 请注意 在我的本地计算机中 一切正常 当我尝试访问控制器路由的任何视图时 假设 Posts Controller index 我收到这个错误 Completed 500 Intern
  • 将数据帧传递给函数时,pandas 何时进行引用传递和值传递?

    def dropdf copy df df df drop y axis 1 def dropdf inplace df df drop y axis 1 inplace True def changecell df df y 0 99 x
  • dotnet test > 有没有办法显示在控制台中运行的测试列表?

    跑步时dotnet test 有没有办法显示在控制台中运行的所有测试的列表而不是某些输出文件 在控制台中看到这样的列表是理想的 x test1 test2 test3 x test4 而不仅仅是总体测试统计数据 运行 失败 跳过 我在 ma
  • 如何执行 URL 中没有 .php 扩展名的 PHP 网页?

    抱歉 菜鸟问题 无法理解我应该搜索的内容 我正在用该页面创建一个网站product php id 777我希望它是product 777 谢谢你 在您的 Web 根目录中创建 htaccess 文件并在其中输入以下内容 Options Fo
  • UICollectionView 滚动到项目不适用于水平方向

    我有一个UICollectionView在一个UIViewController启用分页 由于某种奇怪的原因 collectionView scrollToItem工作时的方向collectionview is vertical但当方向为ho
  • python:无意中修改传递给函数的参数

    有几次我不小心修改了函数的输入 由于 Python 没有恒定的引用 我想知道什么编码技术可以帮助我避免经常犯这种错误 Example class Table def init self fields raw data fields is a
  • 除非您更新 Google Play 服务,否则此应用将无法运行

    我现在一直在不断尝试让 Android V2 的谷歌地图能够工作 我正在设备上尝试此操作 Samsung Galaxy S 2 3 3 和模拟器 我的清单 我尝试过同时使用 Debug 键和 Release 键
  • C# 可以从派生类调用基类属性

    我有一个基类 其属性具有 setter 方法 有没有一种方法可以从派生类调用基类中的 setter 并为其添加更多功能 就像我们使用 base 关键字覆盖方法一样 抱歉 我应该添加一个例子 这是一个例子 希望我做对了 public clas
  • Linux 中 mmap 物理内存的用户空间 memcpy 性能较差

    在我的计算机上安装的 192GB RAM 中 我有 188GB RAM 以上 4GB 硬件地址 0x100000000 由 Linux 内核在启动时保留 mem 4G memmap 188G 4G 数据采集 内核模块使用 DMA 将数据累积
  • Java POI:如何读取Excel单元格值而不是公式计算?

    我正在使用 Apache POI API 从 Excel 文件中获取值 除了包含公式的单元格之外 一切都运行良好 事实上 cell getStringCellValue 返回单元格中使用的公式 而不是单元格的值 我尝试使用evaluateF
  • 使用 equals 方法比较字符串并 == [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中比较字符串 https stackoverflow com questions 513832 how do i compare strings in java Java Strin
  • 如何使用 tqdm 迭代列表

    我想知道处理某个列表需要多长时间 for a in tqdm list1 if a in list2 do something 但这不起作用 如果我使用for a in tqdm range list1 我将无法检索列表值 你知道怎么做吗
  • 无法从 Django Docker 实例内部访问项目绝对 url

    我有一个使用 Cookiecutter Django 启动的项目 目前我正在添加 WeasyPrint 以将某些视图作为 PDF 文件提供 这在开发中运行良好 Cookiecutter Django 使用 Caddy 作为 HTTP 服务器
  • 禁止实例化为临时对象 (C++)

    我喜欢在 C 中使用哨兵类 但我似乎有一种精神困扰 导致反复编写如下错误 MySentryClass arg other code 不用说 这会失败 因为哨兵在创建后立即死亡 而不是按预期在作用域结束时死亡 有没有某种方法可以防止 MySe
  • Django CreateView 不保存对象

    我正在使用基本的博客应用程序练习 django 基于类的视图 然而 由于某种原因 我的 Post 模型的 CreateView 没有将帖子保存在数据库中 模型 py class Post models Model user models F
  • 如何正确使用头文件成为一个完整的类?

    初学者程序员 我遵循工作正常的头文件的样式 但我试图弄清楚在编译时如何不断收到所有这些错误 我正在 Cygwin 中使用 g 进行编译 Ingredient h 8 13 error expected unqualified id befo
  • 进化算法:最优重新群体分解

    这确实是标题中的全部内容 但对于任何对进化算法感兴趣的人来说 这里有一个细分 在 EA 中 基本前提是随机生成一定数量的有机体 实际上只是参数集 针对问题运行它们 然后让表现最好的有机体生存下来 然后 你会重新填充幸存者的杂交品种 幸存者的
  • 如何在 pandas 数据框中执行不同值的累积和

    我有一个像这样的数据框 id date company 123 2019 01 01 A 224 2019 01 01 B 345 2019 01 01 B 987 2019 01 03 C 334 2019 01 03 C 908 201
  • Delphi中从C DLL获取字符串返回值

    我有一个用 C 编写的遗留 DLL 其中包含一个返回字符串的函数 我需要从 Delphi 访问该函数 我所掌握的有关 DLL 的唯一信息是用于访问该函数的 VB 声明 公开声明函数 DecryptStr Lib strlib Str As