c# - 将C#代码转换为Delphi,SafeWaitHandle等同于什么?

标签 c# delphi interop

我正在尝试将 C# 项目转换为 Delphi,C# 代码本身正在从 native dll 导入函数让我们将其命名为“dmp.dll”,我没有其 native 函数的签名,我必须查看如何在 c# 中导入这些函数并尝试在 Delphi 代码中导入它们,我确实导入了很多它们并且它们工作正常,但现在我正在努力使用这个函数 (StartLogging)。这是他们在 C# 中导入的方式:

[DllImport("dmp.dll", CharSet = CharSet.Auto, EntryPoint = "StartLogging")]
public static extern int StartLogging(String AdapterName, 
  PLOG_RECORD_CALLBACK LogRecordCallback, 
  SafeWaitHandle StopLoggingEvent);

PLOG_RECORD_CALLBACK 没有问题,但问题出在这个参数 SafeWaitHandle 上,它是存在于 Microsoft.Win32.SafeHandles 命名空间中的类。我怎样才能把它移植到德尔福?在 Delphi 中与它等效的数据类型是什么?

下面是他们如何在 C# 代码中使用它:

AutoResetEvent StopEvent = new AutoResetEvent(false);

AutoResetEvent 存在于 System.Threading 中 然后他们像这样调用方法:

StartLogging(comboBox1.Text, CallbackProcedure, StopEvent.SafeWaitHandle);

然后在最后并停止他们使用的日志记录:

StopEvent.Set();

我真的很困惑,我不知道该怎么做,感谢您的帮助。 谢谢

最佳答案

你或许可以使用 SyncObjs TEvent .如果您在将 ManualReset 参数设置为 False 的情况下创建它,它应该以大致相同的方式工作。只需传递 Event.Handle(它是一个 THandle,并且与 API 中的任何内容都兼容)。

我没有使用非手动重置事件的示例,但可以在已接受的答案中找到创建 TEvent 的示例 here ;要使其成为非手动重置(IOW,AutoReset),只需将第二个参数更改为False

关于c# - 将C#代码转换为Delphi,SafeWaitHandle等同于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235510/

相关文章:

delphi - W1035 : Return value of function 'Take' might be undefined

delphi - 从我的 Delphi 应用程序使用 Googlemap?

WPF HwndHost 键盘焦点

c# - 如何在 Windows 7 的登录屏幕上显示 UI

c# - 如何合并两个复杂类型的 HashSet 并保留第二组中的重复项?

delphi - 如何将项目添加到 TListBox 并将其与数据对象关联?

vba - 为什么我们需要 Application.PathSeparator?

c# - 将 VB6 类型转换为 C# 结构

c# - 在数据绑定(bind)之前过滤掉 Sitecore 项目

c# - 显示可点击的文本 WPF