我正在尝试将 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/