我已经获得了一个分配内存的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)
答案 0 :(得分:0)
感谢卢卡斯的评论我得到了它的工作。我走在正确的轨道上......只是错过了out
关键字。
[DllImport("data_accessor.dll")]
public static extern void get_pointer_to_new_memory(out IntPtr memory_ptr);