p1 = System.Runtime.InteropServices.Marshal.AllocHGlobal(260)
s1 = System.Runtime.InteropServices.Marshal.PtrToStringUni(p1)
System.Runtime.InteropServices.Marshal.FreeHGlobal(p1)枚举类型应该有一个固定的数值
s1 = System.Runtime.InteropServices.Marshal.PtrToStringUni(p1)
System.Runtime.InteropServices.Marshal.FreeHGlobal(p1)枚举类型应该有一个固定的数值
这个我之前也试出来了,但是我的问题在于,我不能改动delphi的dll,一切都是基于dll写c#的代码并且完美调用。你们还是什么意见吗?
cOutBufferSize, cAPIBufferSize, cApiBufferBlockSize: Cardinal;cOutBufferSize := StrBufSize(OutBuffer);
ZeroMemory(OutBuffer, cOutBufferSize);cOutBufferSize这个size用StrBufSize老是取不对,我在c#里无论传Stringbuilder(已设置好容量)还是IntPtr(已分配好内存),传到delphi里用StrBufSize取,都是一个固定的值:67108860
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 参数名)