gpt4 book ai didi

c# - 如何将 void ** C++ API 导入 C#?

转载 作者:行者123 更新时间:2023-11-30 14:37:56 26 4
gpt4 key购买 nike

在c++中API声明是

BOOL DCAMAPI dcam_attachbuffer          ( HDCAM h, void** top, _DWORD size );

参数:void** top---是指向缓冲区的指针数组_DWORD size--是以字节为单位的top参数的大小

在 C# 中,这是我导入 dll 文件的方式:

[DllImport("dcamapi.dll", EntryPoint = "dcam_attachbuffer",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Ansi, BestFitMapping = false,
ThrowOnUnmappableChar = true)]
[return: MarshalAsAttribute(UnmanagedType.Bool)]

public static extern bool dcam_attachbuffer(IntPtr handleCamera,
[MarshalAsAttribute(UnmanagedType.LPArray)]ref Int32[] buf,
[MarshalAsAttribute(UnmanagedType.U4)] Int32 bufsize);

我的问题是我是否正确地将类型从 C++ 转换为 C#?以及如何在 C# 中声明 void**?请帮助我。

最佳答案

这取决于 dcam_attachbuffer 的作用。

如果它占用缓冲区,定义方法

[DllImport("dcamapi.dll", EntryPoint = "dcam_attachbuffer"]
public static extern bool dcam_attachbuffer(
IntPtr handleCamera,
IntPtr ptrsBuf,
Int32 bufSize);

并传递之前导出的指针。

如果函数正在获取指针的指针,定义方法

[DllImport("dcamapi.dll", EntryPoint = "dcam_attachbuffer"]
public static extern bool dcam_attachbuffer(
IntPtr handleCamera,
ref IntPtr ptrsBuf,
Int32 bufSize);

并使用

System.Runtime.InteropServices.Marshal.Copy(
IntPtr source,
IntPtr[] destination,
int startIndex,
int length
)

在 IntPtr[] 中复制指针

关于c# - 如何将 void ** C++ API 导入 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686972/

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