返回值:装载到lpBuffer中的字符数量(排除空中止字符)。如缓冲区的长度不足以容下完整的路径,则返回值就是要求的缓冲区大小。零表示失败。lpBuffer为返回的路径名
解决方案 »
- 请问用C#写了COM组件,怎么在没有VS的机器上面注册呢?
- 请问TextBox的选定文本发生改变时的事件
- 如何制作进度条
- c#可以实现条件编译,xaml可以吗?
- int i=0;i=i++;i=?
- 请问怎么将Excel表的数据导入到Oracle数据库中,那位大哥指点指点,谢谢!
- 如何让.Net(c#语言)能调用RPC/Literal类型的Web Service
- [求助]最简单的问题
- C#应用程序如何实现操作网页,如比在网页里输帐号密码,然后点登陆,选择进某连接,选择下拉菜单项,单选项等
- 再问启动事务:
- 谁有DotFuscator 1.2专业版的注册码?共享一下
- 在一個CS文件里定義了一個class,在另一個aspx文件不能調用
我给了一个.net framework中的解决方案:
System.IO.Path.GetFullPath("QQ.exe");
和API一样的。
不懂 !
public static extern int GetFullPathName (
[MarshalAs(UnmanagedType.LPTStr)]
string lpFileName,
int nBufferLength,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder lpBuffer,
[MarshalAs(UnmanagedType.LPTStr)]
string lpFilePart
);
就是说,不管是用于输入还是输出的字符串缓冲区,都封送成UnmanagedType.LPTStr;
但在托管程序中,string 类型是常量型的,要是更改了它的缓冲区会破坏托管堆。
StringBuilder 类型就是被设计为用作缓冲区的,用它来代替字符串。
使用时要这样:
StringBuilder sb = new StringBuilder(80); // 缓冲区大小
int ret = GetFullPathName(...); // 我省略不写了。
string s = sb.ToString();
还有一点就是 CharSet = CharSet.Auto
这个是为了在NT和9X上都正确处理UNICODE和ANSI字符串而设置的。
如果你的函数名和被调名一样,可以不设置EntryPoint属性