delphi获取成员函数指针

2023-12-14

有没有一些技巧如何在 Lazarus / delphi 中获取成员函数的指针? 我有这段代码无法编译......

错误是 在德尔福:
variable required

在拉撒路:
Error: Incompatible types: got "<procedure variable type of function(Byte):LongInt of object;StdCall>" expected "Pointer"


代码:

  TClassA = class
  public
      function ImportantFunc(AParameter: byte): integer; stdcall;
  end;

  TClassB = class
  public
     ObjectA: TClassA;
     ImportantPtr: pointer;
     procedure WorkerFunc;
  end;

  function TClassA.ImportantFunc(AParameter: byte): integer; stdcall;
  begin
     // some important stuff
  end;

  procedure TClassB.WorkerFunc;
  begin
     ImportantPtr := @ObjectA.ImportantFunc; //  <-- ERROR HERE
  end;

Thanks!


成员函数不能用单个指针表示。它需要两个指针,一个用于实例,一个用于代码。但这是实现细节,您只需要使用方法类型:

type
  TImportantFunc = function(AParameter: byte): integer of object; stdcall;

然后您可以将ImportantFunc 分配给该类型的变量。

由于您正在使用 stdcall,我怀疑您正在尝试将其用作 Windows 回调。这对于成员函数来说是不可能的。您需要一个具有全局范围的函数或静态函数。

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

delphi获取成员函数指针 的相关文章

  • 全局变量声明

    我是 Python 的初学者 并且已经处理过全局变量的概念 当我以为我理解了这个概念时 我看到了一段简短的代码 证明我错了 message global def enclosure message enclosure def local g
  • 如何在c中的某个位置终止字符指针?

    我试图通过设置空终止符来终止 c 中的字符指针 在特定位置 例如 如果我有一个 char 指针 char hi hello 我希望它是 hell 通过设置o为空 我尝试过使用 strcpy 来执行此操作 例如 strcpy hi 4 0 但
  • 在 JavaScript 函数中加载图像

    我有获取图像像素颜色的功能 function getImage imgsrc var img img src imgsrc var imageMap new Object img load function var canvas
  • 如何用不同的颜色绘制选定的列表框项目?

    是否可以更改 TListBox 中的项目选择焦点颜色和文本颜色 当项目中未启用主题或列表框样式设置为所有者绘制时 项目周围的选择将被涂成蓝色 我相信这是由系统的外观设置全局定义的 我想将所选项目的颜色更改为自定义颜色 举个例子 结果会是这样
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 防止多个实例 - 但还要处理命令行参数?

    我正在从我的应用程序处理与 Windows 相关的扩展文件 因此 当您在 Windows 中双击文件时 它将执行我的程序 然后我从那里处理该文件 如下所示 procedure TMainForm FormCreate Sender TObj
  • 如何返回包含最大值标签的向量

    我有一个 4 列数组 我想获得一个向量 其中每行包含包含该行最大值的列的标签 我可以在循环中执行此操作 但我想使用矩阵函数来提高速度 我怎样才能在不编写自己的库函数的情况下做到这一点 有一个函数可以做到这一点 如果x是你的矩阵 尝试max
  • 如何在iOS的Delphi程序中使用IPv6协议

    我尝试在我的移动程序中使用 IPv6 协议 我的服务器位于 NAT 后面的 LAN 内 在服务器上我使用IP端口3000 我已经组织了从路由器端口 45500 到服务器端口 3000 的虚拟服务器 端口转发 在服务器上 我运行 ipconf
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • 在 Delphi 或 C++ Builder 中使用 Chromium Edge WebView2 [重复]

    这个问题在这里已经有答案了 既然 Microsoft Chromium Edge 已经最终确定 是否可以在 Delphi 或 C Builder 中使用它 据我了解 它是基于WebView2成分 是否有一个组件 例如TWebView2或者E
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • 将图像加载到 TImageList 并读取它们?

    我试图通过将 jpg 转换为 bmp 然后将其保存到 imagelist1 来将 jpg 加载到图像列表中 从上到下的代码片段 Selectdir 有效 fileexists 部分有效 这用于加载文件夹中的所有图像 所有图像都以 0 jpg
  • C++:向 std::sort 提供模板化比较函数

    假设我想让 std sort 根据指针指向的 int 值对指向 int 的指针向量进行排序 忽略那里明显的性能问题 很简单吧 做一个函数 bool sort helper const int a const int b return a l
  • 如何释放字符指针数组?

    我使用此方法将列表中的值转换为数组 以便在 execvp 系统调用中使用 char list2argarray struct shellvalue values int count char array char malloc count
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 如何在表单上绘制半透明图像?

    我想在 Delphi 窗体上绘制半透明图像 但由于某种原因它不起作用 Here is the original PNG border is semi transparent 我将图像加载到TImage object Image1 Trans
  • 在 Delphi 中淡入 alpha 混合 PNG 表单

    几年前 当 Vista 首次发布时 我曾提出过这个问题 但始终没有解决这个问题 并把它搁置起来 留待以后再考虑 我有一个启动屏幕 我花了很大力气让它看起来很棒 这是 32bpp alpha 混合的 PNG 我有一些代码 如果需要 我可以挖掘
  • Delphi 的内存分析工具?

    我建立了一个项目并运行它 然后在 Process Explorer 中查看它 结果发现它在启动时使用的 RAM 比我想象的要多 5 倍 现在 如果我的程序运行得太慢 我会将其连接到分析器并让它告诉我什么正在使用我的所有周期 有没有类似的工具
  • 如果加载 dll 找不到依赖项,有什么方法可以捕获错误吗?

    我正在编写一个 Windows 32 位程序 可以使用多个可能的 dll 之一 所以它尝试依次加载每个 dll 使用SysUtils SafeLoadLibrary如果加载成功 它就会使用该 dll 不幸的是 其中一些 dll 静态链接到其

随机推荐

  • 如何在失败的重新分配中释放 malloc

    我有这个结构 typedef struct person st char first name last name int id Date birthday pPerson Person 可以说我重新分配sizeof Person n 几次
  • 在不同的对象上调用闭包?

    假设我有这样的课程 class MyClass int myInt MyClass myInt this myInt myInt def myMethod print this myInt 我在某个地方有 def myClass1 new
  • JavaScript 中 0 毫秒的 setInterval() 行为

    在我的应用程序中 我发现一些 JavaScript 代码正在使用setInterval0 毫秒 如下所示 self setInterval myFunction 0 显然 这对我来说似乎不是一个好主意 谁能告诉我将会有什么行为setInte
  • 如何将比例平移应用到 DrawingContext?

    我有一个Canvas在 XAML 中应用比例转换 使用DrawingContext我在上面画线Canvas 我现在需要向屏幕添加文本 我认为使用格式化文本我可以应用翻译 但是格式化文本或DrawingContext接受RenderTrans
  • 通过cmd运行带引号的powershell命令

    我需要通过 CMD 运行 powershell 命令 我的命令是 Get WmiObject Class win32 pnpEntity Filter Name like ACPI Thermal Zone 1 GetDevicePrope
  • 使用 javascript/jquery 对 JSON 数据进行分组/排序

    我有一个 JSON 数据 我需要做一些类似 group by 的事情 我之前在这里问过这个问题 但我没有得到任何满意的答案 所以这次我想更深入地解释一下 首先 谁能解释一下两者之间的区别groupby and orderby在 javasc
  • 如何按帖子元素对帖子数组进行排序?

    我有一个应用程序 用户可以在其中搜索待售商品 我目前正在尝试添加功能 以便用户可以查看按价格从低到高排序的商品 用户点击排序按钮后 他们会看到另一个显示不同排序选项的视图控制器 第一个是 价格 从低到高 从低到高被点击后 我使用协议发回一个
  • Android Api 8. 从视图中获取 x 和 y,并在按钮上设置 x 和 y

    我正在使用 API 8 进行编码 我需要从视图中获取坐标 X 和 Y 并将它们设置为新按钮的坐标 我尝试了不同的方法但没有任何作用 setX 和 getX 方法仅适用于 api 级别 11 我需要一种方法在 API8 上执行此操作 这是我的
  • 将文本文件读入数组列表

    我对 Java 很陌生 所以我在解决这个问题时遇到了一些麻烦 所以基本上我有一个如下所示的文本文件 1 John false 2 Bob false 3 Audrey false 如何从文本文件的每一行创建一个 ArrayList 从文件中
  • 为一个小团队和多个并行项目设置 TFS

    我们有一个五人开发团队 将并行构建多个内部项目 经过研究 我发现最好创建一个团队项目 即使对于我们的情况也是如此 对吗 如果是这样 您能否建议如何为项目和时间表设置适当的迭代 TFS 问题 小团队 多个项目听起来与我的情况相似 但我似乎无法
  • 如何获取接口成员列表

    有没有办法获取接口成员列表 我了解 System Reflection MemberInfo 但它包括对象中的所有内容 而不仅仅是某个接口 这是程序 我不知道如何获得接口 因为它不是我写的 但它是 Ascom 标准的一部分 http asc
  • Android ExpandableListView - 寻找教程[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在尝试编写一个 And
  • Sveltekit Actions 返回乱码 json

    从 Sveltekit 操作返回的 json 是乱码 我期望这样的事情 foo bar foo2 bar2 但我得到的是这个 Array foo 1 foo2 2 bar bar2 对于嵌套数据来说 这更令人烦恼 这就是我发送的方式 con
  • 传入未定义的目的是什么?

    我注意到了jQuery以及相关的主题插件 例如jQuery UI pass undefined作为模块定义中使用的匿名函数的参数 如下所示 function undefined jQuery 另外 我注意到 jQuery 推荐的其他插件和
  • 如何以编程方式将类或伪类添加到 JavaFX 中的自定义控件?

    在JavaScript世界中 通常设置元素类来表示它的外观 后来由CSS定义 JavaFX 中也是这样吗 例如 如果我想将负值涂成红色怎么办 TableView细胞 我不会直接编码颜色 但为单元格分配了一些类 例如 负 然后将其着色为红色C
  • 创建我的第一个树枝扩展以向基本模板提供全局变量

    我需要用一些 HTML 代码填充一个变量 并使其可用于我的 base html twig 文件 为了实现这一点 我做了一个树枝扩展 这是我第一次使用树枝扩展 所以我不确定这是否是正确的做法 这是我到目前为止所拥有的 扩展代码 class G
  • 如何更改spark中的日志级别?

    我尝试了所有这些方法 但没有任何作用 在 log4j 文件中 log4j logger org OFF log4j rootCategory ERROR console log4j rootCategory OFF console 在代码中
  • wxpython面板全屏?

    我试图让我的程序的 top panel 仅进入全屏 我希望有一个按钮可以执行此操作 我面临的问题是我不知道如何使面板自行进入全屏而不强制整个使用 ShowFullscreen true 进入全屏的框架 我希望你可以帮助我 class top
  • 如何使用 pytest Monkeypatch 模拟两个连续的控制台输入

    如果第一个用户输入的答案是 n 则模块 overwrite file 请参阅 代码示例 会要求输入新文件名 在我的测试设置中 我使用两个连续的 Monkeypatch setattr 调用来模拟输入 如果我使用以下顺序 结果将是无限循环 m
  • delphi获取成员函数指针

    有没有一些技巧如何在 Lazarus delphi 中获取成员函数的指针 我有这段代码无法编译 错误是 在德尔福 variable required在拉撒路 Error Incompatible types got