kernel32.dll의 lstrcpy를 사용하여 C#의 포인터에서 문자열을 가져 오려고했지만 작동하지 않습니다. lstrlenA가 작동 중입니다. 문자열의 길이를 알려주기 때문에 적어도 kernel32.dll을 치고 있습니다. lstrcpy는 변환하는 VB6 앱에서 작동하므로 작동 할 수 있다는 것을 알고 있지만 여기에없는 이유를 알지 못합니다.lstrcpy가 문자열로 전달되지 않았습니다.
문자열 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;
}
왜 Marshal.PtrToStringAnsi를 사용하지 않으시겠습니까? http://msdn.microsoft.com/en-us/library/7b620dhe(v=VS.100).aspx – dtb
Marshal.PtrToStringAnsi가 작동합니다! 대답하면 받아 들일만한 대답으로 표시 할 것입니다. –