我正在尝试使用 kernel32.dll 的 lstrcpy 从 C# 中的指针获取字符串,但它不起作用。lstrlenA 正在工作,它给了我字符串的长度,所以我至少打了 kernel32.dll。lstrcpy 在我正在转换的 VB6 应用程序中工作,所以我知道它可以工作,但我不知道为什么它不在这里。
字符串 s 永远不会被实际的字符串填充,它只是返回初始填充的字符串。
[DllImport("kernel32.dll", EntryPoint = "lstrlenA", CharSet = CharSet.Ansi)]
private static extern int lstrlen( int StringPointer );
[DllImport( "kernel32.dll",EntryPoint = "lstrcpyA", CharSet = CharSet.Ansi )]
private static extern int lstrcpy(string lpString1, int StringPointer );
private static string StringFromPointer(int pointer)
{
//.....Get the length of the LPSTR
int strLen = lstrlen(pointer);
//.....Allocate the NewString to the right size
string s = "";
for (int i = 0; i < strLen; i++)
s += " ";
//.....Copy the LPSTR to the VB string
lstrcpy(s, pointer);
return s;
}