2011-02-18 52 views
3

我正在嘗試編程一個Walther Mfs100接口檢查掃描儀,但在掃描後我得到「CallbackOnCollectedDelegate was detected」錯誤。我怎樣才能解決這個問題。我.NET 2.0中使用與C#Walther MFS100檢查掃描儀檢測到CallbackOnCollectedDelegate

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

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

回答

3

這不是這個特定的API調用是問題的根源。這個API太模糊而且記錄太差,無法給出直接的答案,但是請查找一個初始化樣式函數,讓您設置回調。該回調是異常的原因。您必須創建一個委託對象並將其存儲在類的一個字段中。這樣垃圾收集器就會看到它的引用,並且不會垃圾收集它。

代替

因此,:

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

做這樣的:

SomeDelegateType callback; 

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

聯繫供應商的支持,如果這沒有幫助。