我正在尝试将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? Delphi中它的等效数据类型是什么?
以下是他们在C#代码中使用它的方式:
AutoResetEvent StopEvent = new AutoResetEvent(false);
类AutoResetEvent
存在于System.Threading
然后他们调用这样的方法:
StartLogging(comboBox1.Text, CallbackProcedure, StopEvent.SafeWaitHandle);
然后在最后,并停止他们使用的日志记录:
StopEvent.Set();
我真的很困惑,我不知道该怎么做,感谢你的帮助。谢谢
就像David Hefferman在回答批准的答案时说的那样:TSimpleEvent(System.SyncObjs)的工作方式与C#的AutoResetEvent相同。
它可以像:
_WaitEvent := TSimpleEvent.Create(nil, resetmanual {boolean}, false, '', false);
_WaitEvent.SetEvent;
_WaitEvent.WaitFor;
如果您使用手动重置,只需使用:_WaitEvent.ResetEvent;