![]() |
1
2
试试这个:
我相信C足够聪明来处理指针并返回一个字符串。 编辑:添加了marshalas属性 |
![]() |
2
7
一种简单而健壮的方法是以c的形式分配缓冲区,如果a
例子: C
C.*
测试: Hello World |
![]() |
3
5
见 this question . 总之,函数应该返回一个intptr,并且必须使用marshal.ptrtostring*将其转换为托管字符串对象。 |
![]() |
4
5
这是一个可怕的函数签名,无法猜测字符串是如何分配的。也不能为字符串释放内存。如果在声明中将返回类型声明为“string”,则p/invoke封送拆收器将在指针上调用cotaskmemfree()。这不太可能是合适的。它将在XP中无声地失败,但在Vista和Win7中会使程序崩溃。 在非托管程序中甚至不能可靠地调用函数。使用正确版本的free()的几率非常小。您所能做的就是将其声明为intptr,并使用marshal.ptrtostringansi()自己封送返回值。当您在taskmgr.exe中观察它时,一定要编写一个测试程序,它可以执行一百万次。如果程序的虚拟机大小没有限制地增长,则会出现无法插入的内存泄漏。 |
![]() |
5
0
尝试在托管端使用字符串。您也可以将字符集设置为ansi |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |