带有C#异常错误的C DLL(访问冲突)

用户名

我有一个从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#中的字符串吗?

乔纳森·亨森(Jonathan Henson)

您需要将字符串编组为c字符串类型。

这样的事情应该可以解决问题:

[DllImport("7plus.dll", Charset = Charset.Ansi)]
public static extern void Do_7plus([MarshalAs(UnmanagedType.LCPStr)]string args);

顺便说一句,您可以在没有PInvoke且没有您正在执行的Shell注入所带来的巨大安全漏洞的情况下解决此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章