带有C#异常错误的C DLL(访问冲突)
本文关键字:DLL 访问冲突 异常 错误 带有 | 更新日期: 2024-09-08 05:00:06
我有一个从C#调用的C DLL
C代码
// The real DLL entry point
__declspec(dllexport) int Do_7plus(char *cmd_line)
char *p1, *p2;
char **argv;
int argc = 0;
int i, l;
int ret;
/*
* Count the args.
*/
l = strlen(cmd_line);
C#代码
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices; // DLL support
namespace Packet
{
public partial class _7PlusFrm : Form
{
[DllImport("7plus.dll")]
public static extern void Do_7plus(string args);
public _7PlusFrm()
{
InitializeComponent();
}
private void button_ok_Click(object sender, EventArgs e)
{
Do_7plus("c:''temp''7plus.zip -SAVE '"c:''temp'''" -SB 5000");
}
}
}
我收到一个异常错误(访问违规)
我该如何修复它?
问题是C中的指针和C#中的字符串吗?
您需要将字符串封送为c-string类型。
像这样的东西应该可以做到:
[DllImport("7plus.dll", Charset = Charset.Ansi)]
public static extern void Do_7plus([MarshalAs(UnmanagedType.LCPStr)]string args);
b.t.w.你可以在没有PInvoke的情况下解决这个问题,也没有你正在进行的shell注入的巨大安全漏洞。