我快疯了,一个API的问题

lxcooi 2009-05-31 12:53:16
API定义:
[DllImport("KERNEL32.DLL", CharSet=CharSet.Auto)]
public static extern bool DefineDosDevice(Int32 dwFlags, String lpDeviceName, String lpTargetPath);
调用:
API.DefineDosDevice(0, "X:", "C:\\windows"); 、/*无效*/

API.DefineDosDevice(0, "X:", "\\??\\C:\\windows"); 、/*有效*/
但映射出来的设备名是:“D:\??\C:\\windows” 为什么啊……,我的程序是在D:运行的,如果是在C:就变成"C:\??\C:\\windows"


为什么啊?
...全文
94 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
simen_frankly 2009-05-31
  • 打赏
  • 举报
回复
帮顶
lxcooi 2009-05-31
  • 打赏
  • 举报
回复
删除时不用两次了,直接用
API.DefineDosDevice(3, "X:", "");
就行了

因为1+2=3…………

呵呵,当然不是上面的原因
而是标志位的原因:

0x01 + 0x10 = 0x11

济南大飞哥 2009-05-31
  • 打赏
  • 举报
回复
别急
lxcooi 2009-05-31
  • 打赏
  • 举报
回复
解决了,声明改成了
public static extern bool DefineDosDevice(UInt32 dwFlags, String lpDeviceName, String lpTargetPath);
调用
API.DefineDosDevice(0, "X:", "C:\\windows");

但是为什么删的时需要调用两次呢……?
API.DefineDosDevice(1, "X:", "");
API.DefineDosDevice(2, "X:", "");



感谢大家,散分
缥缈大木头 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hikaliv 的回复:]
改为

API.DefineDosDevice(1, "X", "C:\\windows");

X 不得为已有的盘符

X 后不跟冒号

试试
[/Quote]

学习一下
zhaoweiting0609 2009-05-31
  • 打赏
  • 举报
回复
把C:换成..试试
光宇广贞 2009-05-31
  • 打赏
  • 举报
回复
改为

API.DefineDosDevice(1, "X", "C:\\windows");

X 不得为已有的盘符

X 后不跟冒号

试试
lxcooi 2009-05-31
  • 打赏
  • 举报
回复
API.DefineDosDevice(0, "X:", "C:\\windows");
如果这样执行后,没有X的情况下没有任何反映
如果有X盘,那么X盘会被删除
光宇广贞 2009-05-31
  • 打赏
  • 举报
回复
……
cnzdgs 2009-05-31
  • 打赏
  • 举报
回复
正确的写法就是
API.DefineDosDevice(0, "X:", "C:\\windows");
执行有什么问题?
kkun_3yue3 2009-05-31
  • 打赏
  • 举报
回复
API.DefineDosDevice(0, "X:", "windows");
这样嘞?出来什么结果?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧