我想用C代码写的dll,但是C函数的接口(interface)有一个数组指针的参数。那么,如何在 C# 中将数组传递给这个 C 函数?
@param requestBuf 请求缓冲区
@param requestBufferSize 请求缓冲区大小
要调用的函数:
int WriteAnswer(unsigned char* requestBuf, unsigned int requestBufferSize)
我导入了这个dll,唯一的问题是:我不知道如何处理第一个参数,因为它需要一个缓冲区指针。
最佳答案
您应该在 C# 中为您的 C++ DLL 和函数创建一个包装器:
[DllImport("mydll",
CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl ,
CharSet = CharSet.Ansi)]
public static extern int WriteAnswer(IntPtr buffer, UInt32 bufferSize);
要从 C# 调用该函数,您应该分配一个“非托管缓冲区”,发送到 C++,然后在 C# 中将其转换回字符串:
IntPtr unmanagedBuffer = Marshal.AllocHGlobal(100);
// Your Unmanaged Call
WriteAnswer(unmanagedBbuffer, 100);
string yourString = Marshal.PtrToStringUni(unmanagedBuffer);
Marshal.FreeHGlobal(unmanagedBuffer);
了解 C++ 返回的字符串类型很重要 PtrToStringUni
表示 UTF16(每个字符 2 个字节)。根据字符串的类型,您可能需要不同的函数。
关于c# - 如何在C#中用指针调用C语言编码的dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25154793/