要重用一个非托管库其中不包含COM对象,只包含导出的功能就可以使用平台调用(P/Invoke)。有了P/InvokeCLRL会加载DLL,其中包含应调用的函数并编组参数。
要使用非托管函数首先必须确定导出的函数名。为此可以使用dumpbin工具和/exports选项。例如可在VS命令行中输入以下命令:
- STR是以null结尾的字符串。
- T把类型标志为泛型类型根据编译器设置为32还是64位,该类型解析为LPCTSTR(ANSI字符串)或LPWSTR(宽Unicode字符串)
该方法的C#声明必须用extern修饰符标记,因为在C#代码中这个方法没有实現代码。相反该方法的显示代码在DLL
[DllImport("环境中使用,应该遵循如下规则:
- 创建一个内部类NativeMethods来包装平台调用的方法调用
- 创建一个公共类,给.NET應用程序提供本机方法的功能
- 使用安全特性来标记所需的安全