在Walther MFS100 Check Scanner上检测到CallbackOnCollectedDelegate

时间:2011-02-18 15:25:06

标签: c#

我正在尝试为Walther Mfs100 Check扫描程序编写接口,但在扫描后我得到“检测到CallbackOnCollectedDelegate”错误。我怎样才能解决这个问题。我使用.net 2.0和c#

[DllImport("mflib.dll.stdcall")]
        public static extern int mfScanFeeder(int mode, int font, int timeout);

 retval = modMFS100.mfScanFeeder(0, 2,5000);

2 个答案:

答案 0 :(得分:3)

这个特殊的API调用不是问题的根源。 API太模糊,文档太差,无法给出直接的答案,但是寻找一个初始化样式函数,让你设置一个回调。该回调是异常的原因。您必须创建一个委托对象并将其存储在类的字段中。这样垃圾收集器就会看到它的引用而不会垃圾收集它。

因此,而不是:

void SetupScanner() {
    mfInitialize(something, myCallback);
}

这样做:

SomeDelegateType callback;

void SetupScanner() {
    callback = new SomeDelegateType(myCallback);
    mfInitialize(something, callback);
}

如果这不起作用,请与供应商联系以获得支持。

答案 1 :(得分:2)

以下是有关此错误的一些信息:
http://social.msdn.microsoft.com/forums/en-US/Vsexpressvb/thread/665b876d-9070-41de-9a3a-d2093895d0c2

您可以尝试为委托使用静态变量,这样可以防止委托被垃圾回收。