我正在尝试为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);
答案 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
您可以尝试为委托使用静态变量,这样可以防止委托被垃圾回收。