gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:23:30 25 4
gpt4 key购买 nike

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

最佳答案

您需要marshal将字符串转换为 c 字符串类型。

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

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

顺便说一句。您可以在没有 PInvoke 的情况下解决这个问题,并且没有您正在执行的 shell 注入(inject)的巨大安全漏洞。

关于c# - 带有 C# 异常错误的 C DLL(访问冲突),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28776831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com