在C#中调用API函数出错的问题

haizhu 2004-01-16 02:23:49
[DllImport("User32.dll")]
public static extern IntPtr CreateDesktop(string lpszDesktop,string lpszDevice,object pDevmode,int dwFlags, long dwDesiredAccess, ref SECURITY_ATTRIBUTES lpsa);

[StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct SECURITY_ATTRIBUTES
{
public int nLength;
public object lpSecurityDescriptor;
public int bInheritHandle;
}
...

SECURITY_ATTRIBUTES s;
s.nLength = Marshal.SizeOf(s);
s.lpSecurityDescriptor = new object();
s.bInheritHandle = 1;
...

string str1 = "@%@";
string str2 = "%@&*";
object o = new object();
CreateDesktop(str1,str2,o,0, 0x10000000L, ref s);

提示错误:未能将对象引用设置对对象实例.我怎么也没找到空引用..不知错在哪里.

另外,API中的SwithDesktop,CloseDesktop函数究竟是干什么用的?网吧管理软件中的虚拟桌面是用这类API做的吗?

Thanks in Advance!!
...全文
75 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimh 2004-01-17
  • 打赏
  • 举报
回复
[StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct SECURITY_ATTRIBUTES
{
public int nLength;
public object lpSecurityDescriptor;
public int bInheritHandle;
}
上面定义有问题,在结构里不可能有object的定义,应该是一个Int类型的指针吧
haizhu 2004-01-17
  • 打赏
  • 举报
回复
怎么没人理会

是问题太简单了,不值得一答?

求大家帮忙了...
msexpert 2004-01-17
  • 打赏
  • 举报
回复
The second and third parameters passed into CreateDesktop() should be NULL. You should call CreateDesktop(str1,null,null,0, 0x10000000L, ref s) in you code.
haizhu 2004-01-16
  • 打赏
  • 举报
回复
没人理?

UP...
haizhu 2004-01-16
  • 打赏
  • 举报
回复
朋友们,帮帮忙吧...看似很简单的问题...

haizhu 2004-01-16
  • 打赏
  • 举报
回复
名空间,DLL引用都添加了..

如果不添加,编译是通不过的...会提示:找不到..是否缺少对*DLL的引用?



现在可以编译..就是在运行时,执行到CreateDesktop函数时出现空引用的异常,感兴趣的朋友,

把代码粘到IDE中试一下....
lyhold 2004-01-16
  • 打赏
  • 举报
回复
应该是命名空间没应用。加入dll的引用啦吗。
haizhu 2004-01-16
  • 打赏
  • 举报
回复
UP....帮帮忙吧....
haizhu 2004-01-16
  • 打赏
  • 举报
回复
是啊,问题就出在 对CreateDesktop(str1,str2,o,0, 0x10000000L, ref s);的调用..

一执行到这句,就会产生空引用的异常,,又查不到..

这个参数其实都不存在在空引用的...问题出在哪呢?

Thanks in Advance!!!!!
haiwangstar 2004-01-16
  • 打赏
  • 举报
回复
引用名空间了.

问题就出在 CreateDesktop(str1,str2,o,0, 0x10000000L, ref s);
这句上...
giardino 2004-01-16
  • 打赏
  • 举报
回复
using System.Runtime.InteropServices;
了么?
haiwangstar 2004-01-16
  • 打赏
  • 举报
回复
UP

110,537

社区成员

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

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

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