从 C++ 获取指向 C# 中非托管内存的指针

Get pointer to unmanaged memory in C# from C++

我得到了一个分配内存的 C++ DLL。它有几个函数需要我将指针传递给这个分配的内存。我在 C# 中工作,所以我需要保留这个指针,这样我就可以在需要时将它传回 C++ DLL。该指针永远不会在 C# 端使用,除非保留它以传递给 C++ 代码。

我不想使用 unsafe 关键字。

我创建了一个 IntPtr 来传递给 C++ 函数来存储分配的内存地址,但它在 C++ 端立即崩溃 (AccessViolationException)。我不确定 DLL 调用的正确语法。

这是我尝试做的一个例子:

[DllImport("data_accessor.dll")]
public static extern void get_pointer_to_new_memory(IntPtr memory_ptr);

不使用 unsafe 是否可行?如果可以,怎么做?

更新: 抱歉,我没有早点 post。这是我正在调用的函数。 (为保护无辜者,化名。)

typedef void* handle_ptr;
void DLL_API get_pointer_to_new_memory(handle_ptr* handle)

多亏了卢卡斯的评论,我才开始工作。我走在正确的轨道上...只是缺少 out 关键字。

[DllImport("data_accessor.dll")]
public static extern void get_pointer_to_new_memory(out IntPtr memory_ptr);