如何制作PInvoke友好的原生API?

Afr*_*ief 6 .net c c# c++ pinvoke

如何使本机API成为PInvoke友好的?

有关于如何修改本机程序,以P中使用的一些技巧/调用这里.但在我写一个原生程序之前,我应该注意哪些事情让我的程序/库PInvoke友好?

使用C或C++很好.


更新:
如果我编写一个C API,那么我需要做些什么才能使用C#语法进行P/Invoke-able,如下所示:

[DLLimport("MyDLL.dll")]
Run Code Online (Sandbox Code Playgroud)

是否可以对本机C++代码/库执行相同的操作?


关于制作P/Invoke友好本机API的一些技巧的摘要/改
述:+参数应该是本机类型(int,char*,float,...) +如果动态内存被分配和传递,则
参数越少越好
+托管代码,确保创建一个"更清洁"的功能,也是p/invoked
+提供样本和/或单元测试,说明如何从.NET
+ 调用API 提供C++/CLI包装器

Dar*_*rov 1

根据定义,每个本机函数都可以从托管代码中 p/调用。但为了 p/invoke 友好,函数应该具有尽可能少的参数,这些参数应该是本机类型(int、char*、float,...)。此外,如果函数在返回到托管代码的某个指针上分配内存,请确保编写其对应部分来释放该指针,因为托管代码无法释放从非托管代码分配的内存。