带ref参数的c#和pvcs
我必须从c#调用VM32VBWRAP.dll。它是一个用于从代码管理PVC的库。我可以调用所有方法 没有任何ref参数。但是我不能用ref参数调用方法 我总是会遇到这样的错误: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。” 位于System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToManaged(IntPtr pMarshalState、Object&pManagedHome、IntPtr pNativeHome) 在LibraryPanelo.SourceControl.Pvcs.PvcsGetLockInfoVB(Int32 archiveType、String pathAndFileNameServer、String pathAndFileNameLocal、String usernameInPVCS、Byte[]&版本、Byte[]&版本、Byte[]&usernameOutPVCS、Int16信息、Byte标志) 我的声明是:带ref参数的c#和pvcs,c#,pvcs,C#,Pvcs,我必须从c#调用VM32VBWRAP.dll。它是一个用于从代码管理PVC的库。我可以调用所有方法 没有任何ref参数。但是我不能用ref参数调用方法 我总是会遇到这样的错误: “试图读取或写入受保护的内存。这通常表示其他内存已损坏。” 位于System.StubHelpers.MngdNativeArrayMarshaler.ConvertContentsToManaged(IntPtr pMarshalState、Object&pManagedHome、IntPtr pNativeHome)
[DllImport("VM32VBWRAP.dll", CharSet = CharSet.Ansi, SetLastError = true,
EntryPoint = "_wPvcsGetLockInfoVB@36")]
static extern int PvcsGetLockInfoVB(
int archiveType, string pathAndFileNameServer,
string pathAndFileNameLocal, string usernameInPVCS,
[MarshalAs(UnmanagedType.LPArray, SizeConst = 64)] ref byte[] version,
[MarshalAs(UnmanagedType.LPArray, SizeConst = 64)] ref byte[] versionNew,
[MarshalAs(UnmanagedType.LPArray, SizeConst = 64)] ref byte[] usernameOutPVCS,
short info, byte flag );
任何想法???完全不知道,但是调用dll方法时是否缺少ref关键字?我在errormessage中看不到它。由于我对签名不是100%清楚,如何从本机代码调用该方法?传递填充有数据的缓冲区,或者获取通过方法分配的缓冲区?您好。。我也面临同样的问题。。有什么想法吗?