对于简单参数的函数,C#可以通过变量的映射来实现
但是如果参数比较复杂,比如:
Shell32.dll中的
int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
这个函数的参数是个结构体,它如何在C#中调用呢?附上结构体的声明如下:
typedef struct _SHFILEOPSTRUCT {
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
但是如果参数比较复杂,比如:
Shell32.dll中的
int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
这个函数的参数是个结构体,它如何在C#中调用呢?附上结构体的声明如下:
typedef struct _SHFILEOPSTRUCT {
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
} SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;
}
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
public Uint32 wFunc;
public String pFrom;
public String pTo;
public FILEOP_FLAGS fFlags; //????这个是什么?
public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
public String lpszProgressTitle;
}还有CharSet需要设置为ansi,不然好像得不到字符串
给个东西参考下:http://www.codeproject.com/csharp/essentialpinvoke.asp
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
public Uint32 wFunc;
public String pFrom;
public String pTo;
public FILEOP_FLAGS fFlags; //????这个是什么?
public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
public String lpszProgressTitle;
}
http://www.pinvoke.net/default.aspx/shell32/SHFileOperation.html