2009-08-28 63 views
2

看完後Dynamically calling unmanaged dlls in .net你可以使用.net 3.5 Action或Func作爲Marshalled非託管代理嗎?

我一直在嘗試修改代碼以符合我的喜好。我做了一個實現idisposable的類來封裝加載調用並在需要時釋放它們。但是,我似乎無法弄清楚如果可以使用匿名代理的話。

var loaded=DynamicLibraryLoader.TryLoad("User32.dll"); 
var beeper=loaded.GetProcAddress("MessageBeep"); 
var type=typeof(Action<UInt32>); 
Action<UInt32> beepAction2=(Action<UInt32>) Marshal.GetDelegateForFunctionPointer(beeper,type); 

最後一行拋出一個參數異常,說明指定的類型不能是泛型類型定義。有沒有辦法解決這個問題,還是必須提供一個命名委託來執行任何不受管理的操作?

對於您可以通過默認與非託管代碼窗口做任何有興趣的參考 - Link(創建快捷方式,動態地加載DLL)

回答

1

由於異常指示,必須使用時,非泛型委託將本地函數指針轉換爲託管代碼。

+0

所以沒有語法或方法嗎? – Maslow 2009-08-28 17:15:32

+0

@Maslow,目前還沒有 – JaredPar 2009-08-31 20:53:16

+0

我想因爲沒有其他的答案,我會接受答案,只是回讀我的例外說什麼,我會偏愛一些資源,參考或某種類型的解決方法的想法。 – Maslow 2009-09-07 23:38:21

相關問題