两个问题:
一、"无法将String转换为Ststem.IntPtr" 的问题
调用api函数,原型如下:
[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,[In, Out] byte[] buffer,UInt32 size,out IntPtr lpNumberOfBytesRead);c#中如下调用:
ReadProcessMemory(handle, (IntPtr)0x0081B328, tmp_byte, 960, out ptrBytesReaded);
其中第二个参数是个IntPtr类型的内存地址,现在我想在文本框中手工输入类似0x0081B328得地址,然后放入第二个参数进行调用(IntPtr)TextBox1.Text,但是总是报错:无法将String转换为Ststem.IntPtr,请教如何转换二、"运行库遇到了错误" 的问题
调用api函数,原型如下:
DWORD WINAPI BL_GetText32(LPSTR lpszCurWord,int nBufferSize,LPRECT lpWordRect)
功能:
从内部缓冲区取出单词文本串。对英语文本,该函数最长取出一行内以空格为界的三个英文单词串,遇空格,非英文字母及除‘-’外的标点符号,则终止取词。对汉字文本,该函数最长取出一行汉字串,遇英语字母,标点符号等非汉语字符,则终止取词。该函数不能同时取出英语和汉语字符。
参数:
lpszCurWord
[输入] 目的缓冲区指针。
nBufferSize
[输入] 目的缓冲区大小。
lpWordRect
[输出] 指向 RECT 结构的指针。该结构定义了被取单词所在矩形区域。
返回值:
当前光标在全部词中的位置。
c#中如下调用:
[DllImport("Nhw32.dll", CharSet = CharSet.Auto)]
public static extern string BL_GetText32(string strDest, int count, ref RECT rect); [StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}string sb = "";
RECT tmp_rect=new RECT.RECT();
BL_GetText32(sb, 64,ref tmp_rect);运行报错:
运行库遇到了错误。此错误的地址为 0x7a0a6b30,在线程 0xe78 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。请高手指点,不胜感激
一、"无法将String转换为Ststem.IntPtr" 的问题
调用api函数,原型如下:
[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,[In, Out] byte[] buffer,UInt32 size,out IntPtr lpNumberOfBytesRead);c#中如下调用:
ReadProcessMemory(handle, (IntPtr)0x0081B328, tmp_byte, 960, out ptrBytesReaded);
其中第二个参数是个IntPtr类型的内存地址,现在我想在文本框中手工输入类似0x0081B328得地址,然后放入第二个参数进行调用(IntPtr)TextBox1.Text,但是总是报错:无法将String转换为Ststem.IntPtr,请教如何转换二、"运行库遇到了错误" 的问题
调用api函数,原型如下:
DWORD WINAPI BL_GetText32(LPSTR lpszCurWord,int nBufferSize,LPRECT lpWordRect)
功能:
从内部缓冲区取出单词文本串。对英语文本,该函数最长取出一行内以空格为界的三个英文单词串,遇空格,非英文字母及除‘-’外的标点符号,则终止取词。对汉字文本,该函数最长取出一行汉字串,遇英语字母,标点符号等非汉语字符,则终止取词。该函数不能同时取出英语和汉语字符。
参数:
lpszCurWord
[输入] 目的缓冲区指针。
nBufferSize
[输入] 目的缓冲区大小。
lpWordRect
[输出] 指向 RECT 结构的指针。该结构定义了被取单词所在矩形区域。
返回值:
当前光标在全部词中的位置。
c#中如下调用:
[DllImport("Nhw32.dll", CharSet = CharSet.Auto)]
public static extern string BL_GetText32(string strDest, int count, ref RECT rect); [StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}string sb = "";
RECT tmp_rect=new RECT.RECT();
BL_GetText32(sb, 64,ref tmp_rect);运行报错:
运行库遇到了错误。此错误的地址为 0x7a0a6b30,在线程 0xe78 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。请高手指点,不胜感激
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public Int16 Left;
public Int16 Top;
public Int16 Right;
public Int16 Bottom;
}
函数原型中的int最好也改为Int16