In C# the extern
modifier is used to declare a method that is implemented externally. Usually it is used with DllImport
attribute to call some function in unmanaged code.
I wonder if there is a way to provide custom implementation of extern
method?
To understand better the problem consider the following use case. I have a set of functions开发者_Python百科 implemented in unmanaged code and I'd like to supply pointers to these function in run-time (during the loading of assembly).
The same thing DllImport
attribute does, but I'd like to provide pointers by myself.
This is possible although you would need to PInvoke several things (LoadLibrary
and GetProcAddress
- see links below)... it is called "late binding native code"...
Some relevant links with source:
- http://blogs.msdn.com/b/junfeng/archive/2004/07/14/181932.aspx
- http://www.codeproject.com/KB/cs/dyninvok.aspx
- http://pinvoke.net/default.aspx/kernel32/GetPRocAddress.html
- http://www.pinvoke.net/default.aspx/kernel32.loadlibrary
You would need to use LoadLibrary and GetProcAddress
精彩评论