关于P/Invoke时各种类型和内存资源Mashal的。可以先看两文热热身,
[url=http://www.z8soft.com/article/program/201104/201104255179.shtml]http://www.z8soft.com/article/program/201104/201104255179.shtml[/url]
[url=http://msdn.microsoft.com/zh-cn/magazine/cc164193.aspx]http://msdn.microsoft.com/zh-cn/magazine/cc164193.aspx[/url]

后一篇的英文原版地址[url=http://msdn.microsoft.com/en-us/magazine/cc164193.aspx]http://msdn.microsoft.com/en-us/magazine/cc164193.aspx[/url]

我的问题是:
两个个非托管的方法(C或者C++ 语言)
void fun1(type** p)
{
   *p = new type;
}

type* fun1()
{
    return new type;
}

一般化问题,就是在非托管代码中申请了一块内存,需要在这个方法之外使用。那么这个方法在C#托管中使用时的对应声明是什么?
(个人觉得可以将这中情况当作输入输出参数处理,输入一个地址类型(可以当作int类型看待)的变量,在方法返回后其值修改被修改)。

如果还有两外一个方法

void fun2(const type *p)
{
    //根据*p的内容采取一些行动,这些行动不会导致*p的内容被修改。这是一个输入参数
}

如果这个方法需要和上一个方法配和使用,就是上一个方法申请的内存需要作为这个方法的参数。
其用法大概如下。
type *p;
fun1(&p);
fun2(p);

如果他们都需在托管C#中使用,fun2对应的声明是什么样的?

fun1和fun2在托管中调用过程就好像是
一个指向托管区域一块内存的一个句柄在托管区域绕了一圈又回到非托管区域。 [url=http://www.z8soft.com/article/program/201104/201104255179.shtml]http://www.z8soft.com/article/program/201104/201104255179.shtml[/url][url]http://www.z8soft.com/article/program/201104/201104255179.shtml[/url]