当前位置:编程学习 > C#/ASP.NET >>

DllImportAttribute特性中的ExactSpelling什么作用?

看到代码中有这个,不知道什么作用?查了下msdn和网络,还是不懂!问下各位! --------------------编程问答-------------------- 比如:
[DllImport("KERNEL.DLL", EntryPoint="MoveFileW", SetLastError=true, 
CharSet=CharSet.Unicode, ExactSpelling=true, 
CallingConvention=CallingConvention.StdCall)] 
public static extern bool MoveFile(String src, String dst); 

 其中入口点EntryPoint标识函数在动态链接库的入口位置,在一个受管辖的工程中,目标函数的原始名字和序号入口点不仅标识一个跨越互操作界限的函数。而且,你还可以把这个入口点映射为一个不同的名字,也就是对函数进行重命名。重命名可以给调用函数带来种种便利,通过重命名,一方面我们不用为函数的大小写伤透脑筋,同时它也可以保证与已有的命名规则保持一致,允许带有不同参数类型的函数共存,更重要的是它简化了对ANSI和Unicode版本的调用。CharSet用于标识函数调用所采用的是Unicode或是ANSI版本,ExactSpelling=false将告诉编译器,让编译器决定使用Unicode或者是Ansi版本。其它的参数请参考MSDN在线帮助. 
你写的是这类程序吗?

--------------------编程问答-------------------- 是这类,但我还是不知道ExactSpelling在里面干什么用的。。 --------------------编程问答-------------------- 关注一下.顶一下! --------------------编程问答-------------------- msdn搜一下吧 --------------------编程问答-------------------- msdn也搜了,各位知道的简单说下!网上大多也是一笔带了!
行行好! --------------------编程问答-------------------- [DllImport("user32.dll", ExactSpelling = true)]

public static extern int MessageBox(…); // ERROR!

将ExactSpelling = true标记后上面的代码就会出错,因为在user32.dll中并没有MessageBox这个函数,只有MessageBoxA(ANSI版本)和MessageBoxW(Unicode版本),使用了ExactSpelling = true后将会对方法的签名进行严格的匹配,不符合的话将会有EntryPointNotFoundException产生。




--------------------编程问答-------------------- 学习下
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,