如何将回调委托传递给.netCF中的dll

时间:2012-01-24 00:31:05

标签: c#

我正在编写一个.netCF应用程序,它可以连接到不同硬件平台上的条形码扫描器。 I. E. Motorola或Intermec等。我用他自己的DLL包装了他们的DLL以提供一个通用接口,我在运行时使用Reflection LoadFrom()加载我的dll,然后获得一个Method参考。

我可以将大多数参数传递给我的dll中的方法,只有一个例外。我需要将一个回调函数传递给dll,这样当读取发生时,它将回调主程序来处理条形码读取。

当我调用该方法时,它会抛出ArgumentException。

我的问题是如何将此方法引用传递给我的dll,还是有更好的方法来执行此操作?

    public delegate void ReadNotify(BCReadData readData);

    public void AttachReadNotify(ReadNotify ReadNotifyHandler)
    {
        if (type == ReaderType.UNKNOWN || scanIntf == null)
            return;
        try
        {
           setReadNotify.Invoke(scanIntf,new Object [] {ReadNotifyHandler});
        }
        catch (Exception e)
        {
            throw new Exception("Unable to set notify handler" + e.Message);
        }

    }

1 个答案:

答案 0 :(得分:0)

如果您的本机回调使用__stdcall调用约定,则可以使用Marshal.GetFunctionPointerForDelegate方法完成此操作。