gpt4 book ai didi

c# - 调用从 C# 获取 char** 的 C dll 函数

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

我有一个 C dll,它导出一个如下所示的函数:

void GetSectionData(TCHAR name [], char **Address, DWORD * Size)

该函数获取名称并在分配了 *Size 字节后返回地址。以下是如何在 C 中使用该函数的示例:

char *addr[64]:
DWORD Size[64];
TCHAR name[260];
sprintf( name, "myDll.dll);
GetSectionAddress(name, &addr[index],&Size[index]);

我想在 C# 中使用这个 dll 函数,但不存在不安全
我的函数声明应该使用 DllImport 属性,但我不知道如何声明参数,主要是 Address 和 Size 参数(我假设 name 可以声明为 StringBuilder):

[DllImport("myDll.dll")]
public static extern void GetSectionData(?)

最佳答案

一般来说,您的 pinvoke 签名是

static extern void GetSectionData(string name, out string address, out int size);

但是:

  • 在“adress”参数中,您可能需要通过[MarshalAs]属性和正确的SizeIndex值来指示与“size”的关系。如果您将“out string”更改为“out char[]”,那么肯定是必需的,但是如果您使用 string 并且返回的字符串是普通的以 null 结尾的字符串,我认为没有必要
  • 如果函数为address数组分配内存,您可能会遇到一些问题,因为函数的使用会假设调用者必须知道如何释放它。请参见https://stackoverflow.com/a/1932956/717732https://stackoverflow.com/a/12274007/717732 - 主要问题是实际上有很多方法来分配缓冲区(包括基于堆栈的临时数组..),并且调用者将很难猜测。尤其是 p/invoke 中使用的编码器,因为它对您的代码一无所知。

关于c# - 调用从 C# 获取 char** 的 C dll 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16892117/

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