C#调用dll时的类型转换总结
2021-02-18 02:18
对于字符串的处理分为以下几种情况:
1、 字符串常量指针的处理(LPCTSTR),也适应于字符串常量的处理,.net中的string类型是不可变的类型。
2、 字符串缓冲区的处理(char*),即对于变长字符串的处理,.net中StringBuilder可用作缓冲区
Win32:
BOOL GetFile(LPCTSTR lpRootPathName);
C#:
函数声明:
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern bool GetFile (
[MarshalAs(UnmanagedType.LPTStr)]
string rootPathName);
函数调用:
string pathname;
GetFile(pathname);
备注:
DllImport中的CharSet是为了说明自动地调用该函数相关的Ansi版本或者Unicode版本
变长字符串处理:
C#:
函数声明:
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
[MarshalAs(UnmanagedType.LPTStr)]
string path,
[MarshalAs(UnmanagedType.LPTStr)]
StringBuilder shortPath,
int shortPathLength);
函数调用:
StringBuilder shortPath = new StringBuilder(80);
int result = GetShortPathName(
@"d:\test.jpg", shortPath, shortPath.Capacity);
string s = shortPath.ToString();