第三方 dll 中的 C# 回调函数正确实现?



目前我正在使用第三方DLL作为打印机。它是 C++ DLL 的 C# 包装器,因此可以在 C# 应用程序中使用。打印方法包含一个回调函数,打印完成后应调用该函数。但是,我无法让它工作,所以我想知道我是否正确实现了它。

此打印和回调函数的(缩短(方法是:

public class PrinterWrapper 
{
public uint Print(CallbackFunction callbackFunction);
public delegate void CallbackFunction();
}

在另一个类中,我正在使用 print 函数并尝试以这种方式测试回调:

class Foo {
private void callback() {
{
Console.WriteLine("Test");
}
public void Print() {
{
PrinterWrapper wrapper = new PrinterWrapper();
wrapper.Print(this.callback);
wrapper.Print(new PrinterWrapper.CallbackFunction(this.callback));
}
}

我已经尝试了调用 Print 方法的两个版本(两者都应该相同(,但我没有得到回调。相反,我在打印准备就绪时收到 APPCRASH。做了一些搜索,发现我可以通过设置捕获异常

<runtime>
<legacyCorruptedStateExceptionsPolicy enabled="true" />
</runtime>

它告诉我这是一个读/写内存保护异常。事件日志还显示错误,就在应用程序崩溃之前:

Application: Application.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException

因此,看起来第三方 DLL 正在尝试访问它无权访问的内存。文档说回调参数是一个指针(用于原始C++ DLL(。没有 C# 包装器 DLL 的文档。

有了这些信息,我是否正确使用了回调函数,还是必须更改某些内容才能使其正常工作?

回调委托的实现错误。修复了它,现在可以工作了。

最新更新