以前经常在c#下调用win32下的非托管函数,类似如下代码:
[DllImport("user32.dll")]
public static extern int MessageBoxEx(
IntPtr hWnd,
[MarshalAs(UnmanagedType.LPTStr)]String Message,
[MarshalAs(UnmanagedType.LPTStr)]String Header,
UInt32 Type,
UInt16 LanguageID);
这些都必须明确写出函数的各种参数,否则会错的很惨。我也曾有过类似的疑问,用一种技术自动探测出dll中的函数和参数,但好像没得到过肯定地回答。其实想想,如果真能这样,那微软那些dll也就没有什么秘密可言了。也不用公布什么原码了!
当然不排除一些智商极高的技术狂人有做到的可能!
[DllImport("user32.dll")]
public static extern int MessageBoxEx(
IntPtr hWnd,
[MarshalAs(UnmanagedType.LPTStr)]String Message,
[MarshalAs(UnmanagedType.LPTStr)]String Header,
UInt32 Type,
UInt16 LanguageID);
这些都必须明确写出函数的各种参数,否则会错的很惨。我也曾有过类似的疑问,用一种技术自动探测出dll中的函数和参数,但好像没得到过肯定地回答。其实想想,如果真能这样,那微软那些dll也就没有什么秘密可言了。也不用公布什么原码了!
当然不排除一些智商极高的技术狂人有做到的可能!