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

时间:2015-02-21 00:31:24

标签: c# pointers pinvoke intptr

我已经获得了一个分配内存的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吗?如果是这样,怎么样?

更新: 对不起,我没有尽快发布。这是我正在调用的函数。 (名称已被更改以保护无辜者。)

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

1 个答案:

答案 0 :(得分:0)

感谢卢卡斯的评论我得到了它的工作。我走在正确的轨道上......只是错过了out关键字。

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