C#调用第三方DLL 尝试读取或写入受保护的内存、Access violation at address 09303B19. Write of address

無法替代 2019-06-21 06:26:59
DLL是另一家公司的 用什么开发的不清楚

第1个问题:尝试读取或写入受保护的内存

代码如下:

private void button1_Click(object sender, EventArgs e)
{
txtResult.Text = "";
txtOut.Text = "";

string strIn = txtIn.Text;

StringBuilder strOut = new StringBuilder(1024);

int result = Test1.YbjkInterface(strIn,ref strOut);

txtResult.Text = result.ToString();

txtOut.Text = strOut.ToString();

MessageBox.Show("执行完毕");

}

class Test1
{
[DllImport("hisYbjkInterface.dll")]

public static extern int YbjkInterface(string strIn, ref StringBuilder strOut);
}


搜了一下 改成这样 不再报内存错误

private void button1_Click(object sender, EventArgs e)
{
txtResult.Text = "";
txtOut.Text = "";

string strIn = txtIn.Text;

StringBuilder strOut = new StringBuilder(1024);

int result = Test1.YbjkInterface(strIn, strOut);

txtResult.Text = result.ToString();

txtOut.Text = strOut.ToString();

MessageBox.Show("执行完毕");

}

class Test1
{
[DllImport("hisYbjkInterface.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]

public static extern int YbjkInterface(string strIn, [MarshalAs(UnmanagedType.LPStr)]StringBuilder strOut);
}


但又有另一个问题 如果传入错误的参数 DLL会有出参提示 格式不对 但如果是正确的参数 会提示
Access violation at address 09303B19. Write of address 09303B19



我用别的开发工具 比如VFP 试了一下是可以调用成功的
...全文
322 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
無法替代 2019-06-22
  • 打赏
  • 举报
回复
找了几台电脑测试 XP电脑 32位的 是正常的 Win7 64位和32位都是一样的错误提示 不过VFP虽然调用成功 但是退出时也是报内存错误 是不是这个DLL有问题呀
stherix 2019-06-22
  • 打赏
  • 举报
回复
看你写的情况,可能不是stdcal,尝试用cdcel
eisldkw 2019-06-22
  • 打赏
  • 举报
回复
可能是你的DLL调用方式不合适,以前听其他人说过,好象跟你是同一类的问题

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧