lstrcpy没有在string中传递更新

时间:2010-04-30 15:52:43

标签: c# kernel32

我正在尝试使用kernel32.dll的lstrcpy从C#中的指针获取字符串,但它无效。 lstrlenA IS正在工作,它给了我字符串的长度,所以我至少要点击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;
}

1 个答案:

答案 0 :(得分:1)

我怀疑它可能与托管字符串不可变有关,所以每当你认为你正在改变它时,你实际上是在创建一个新字符串并改变引用来查看新字符串。 / p>

我不确定当你使用Windows API函数时它是如何工作的,但是在调用lstrcpy期间可能会创建一个包含指针指向的文本的新字符串,但因为{{1可能不知道lstrcpy,它没有正确处理它,所以它不会改变System.String来引用新字符串。

我认为您想要使用的是s,因为这不是一成不变的。

相关问题