【问题标题】:Convert C# code to Delphi, what is the equivalent of SafeWaitHandle?将C#代码转换为Delphi,SafeWaitHandle相当于什么?
【发布时间】:2011-11-22 23:45:18
【问题描述】:

我正在尝试将 C# 项目转换为 Delphi,C# 代码本身正在从本机 dll 导入函数,让我们将其命名为“dmp.dll”,我没有其本机函数的签名,我必须查看如何在 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();

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

【问题讨论】:

  • 在这种情况下,它听起来像一个事件句柄。由 CreateEvent API 返回。不记得 Delphi RTL 是否提供 TEvent 包装器。

标签: c# delphi interop


【解决方案1】:

您可能可以使用SyncObjs TEvent。如果您使用设置为FalseManualReset 参数创建它,它应该以相同的方式工作。只需传递Event.Handle(它是一个 THandle 并且与 API 中期望的任何东西兼容)。

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

【讨论】:

  • +1 但是,如果您确定如何在 Delphi 中重现 AutoResetEvent 并且 SafeWaitHandle 是 win 32 事件的句柄,那就太好了。这就是为什么我只发表评论。
  • TLightweightEvent 是一个没有等待句柄的手动重置事件。不能在这里用。 TSimpleEventTEvent 相同:TSimpleEvent = class(TEvent); 答案是TEvent 创建时将ManualReset 设置为False。我不会发布答案,因为您已经发布了,但我认为您需要改进它。
  • @David:更好?我希望它更完整地提供一个事件使用示例,但现在没有时间。如果您想发布更好的答案,我会在之后删除我的。
【解决方案2】:

就像 David Hefferman 在对已批准答案的回复中所说:TSimpleEvent (System.SyncObjs) 的工作方式与 C# 的 AutoResetEvent 相同。

可以这样使用:

_WaitEvent := TSimpleEvent.Create(nil, resetmanual {boolean}, false, '', false);
_WaitEvent.SetEvent;
_WaitEvent.WaitFor;

如果您使用手动重置,只需简单地使用: _WaitEvent.ResetEvent;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2015-11-27
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多