C# で、kernel32.dll の lstrcpy を使用してポインターから文字列を取得しようとしていますが、うまくいきません。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;
}