c# 调用delphi的dll的参数(枚举类型)传递有关问题

c# 调用delphi的dll的参数(枚举类型)传递问题
1.  Delphi的导出函数中,有一个参数为自定义的枚举类型,那么c#在调用时如何传递一个枚举值给这样参数?

2. 另外,还有Delphi的导出函数中,一个PChar 类型的参数,我用StringBuidder类替换。
   这个PChar类型的参数其实是做内存块用的,如果是delphi自己调用的话,在调用前,我会用StrAlloc函数分配固定大小的内存,然后再将它作为参数传入,之后,dll里会执行一条ZeroMemory语句来将这个内存块全部填充为0.  Delphi自己调用的话,没问题。

现在是c#调用,new StringBuildder的时候,容量也指定为上面的那个固定值,但 ZeroMemory这句话就错了,请问各位,哪位有知道这两个问题的,麻烦指点一二。谢谢!
------解决思路----------------------
        p1 = System.Runtime.InteropServices.Marshal.AllocHGlobal(260)
        s1 = System.Runtime.InteropServices.Marshal.PtrToStringUni(p1)
        System.Runtime.InteropServices.Marshal.FreeHGlobal(p1)

枚举类型应该有一个固定的数值
------解决思路----------------------
我以前调用别的语言的dll时,参数的类型会搜一下对应当前语言的替换类型,一般都可以对应到的
------解决思路----------------------
枚举用对应的整数就可以了。

清空内存不需要,因为C#会自动对数组清零。
------解决思路----------------------
定义string,并且制定长度就行。或者试试out char[]看看。
------解决思路----------------------
这个PChar类型的参数其实是做内存块用的,如果是delphi自己调用的话,在调用前,我会用StrAlloc函数分配固定大小的内存
cOutBufferSize := StrBufSize(OutBuffer);
这种dll不标准啊,怎么跨平台用
------解决思路----------------------
可能需要
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public char[] 参数;
或者
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string 参数;
------解决思路----------------------
在导入函数的时候指定参数的封送方式
[DllImport(XXX)]
static void 函数名([MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] string 参数名)