dll是delphi写的,某函数参数是array of byte,我用ref byte[],intptr,stringbuilder传过去我构建好的byte[],总是报内存读写错误。请指教啊。。
解决方案 »
- 奇怪!!!触发dropdownlist事件会使GridView显示样式的改变,请高手指教一下!!!
- 求Ewebeditor
- 一个对数据进行分析并用曲线图显示的问题
- VB中使用的模块abc.bas和abc.dll,在C#中应该怎么用?
- 现在还流行orm吗?
- 如何实现在winform窗体中显示类似表格的东西?
- ★如何使鼠标双击DataGridView的某行或某cell时 在另一个窗体显示该行数据
- .NET2005连不上SQL2005
- 动态生成一组CheckBox,怎样在提交后得到这些CheckBox的状态
- 请问一个table控件的问题
- C#中十六进制相加问题
- INF编程为什么不能在复制完文件再运行相关文件呢?
我估计是delphi操作了byte[]数组
[DllImport("XXX.DLL", CharSet = CharSet.Auto)]
static extern int testBytes([MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]byte[] bytes);
之前就试过了,加了ref报内存错误,不加ref报引擎错误
你声明的这个invoke,会报MarshalAs(UnmanagedType.ByValArray, SizeConst = 256只能用在struct的声明中,不能用在参数的声明中
[SuppressUnmanagedCodeSecurity, SecurityCritical, DllImport("QCall", CharSet=CharSet.Unicode)]
private static extern void DecryptKey(SafeKeyHandle pKeyContext, [MarshalAs(UnmanagedType.LPArray)] byte[] pbEncryptedKey, int cbEncryptedKey, [MarshalAs(UnmanagedType.Bool)] bool fOAEP, ObjectHandleOnStack ohRetDecryptedKey);internal static class JitHelpers
{
// Fields
internal const string QCall = "QCall"; // Methods
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries"), SecurityCritical]
internal static ObjectHandleOnStack GetObjectHandleOnStack<T>(ref T o) where T: class
{
TypedReference reference = __makeref(o);
return new ObjectHandleOnStack(reference.GetPointerOnStack());
}
//部分代码省略
}
[StructLayout(LayoutKind.Sequential)]
internal struct ObjectHandleOnStack
{
private IntPtr m_ptr;
internal ObjectHandleOnStack(IntPtr pObject)
{
this.m_ptr = pObject;
}
}
public byte[] Encrypt(byte[] rgb, bool fOAEP)
{
if (rgb == null)
{
throw new ArgumentNullException("rgb");
}
this.GetKeyPair();
byte[] o = null;
EncryptKey(this._safeKeyHandle, rgb, rgb.Length, fOAEP, JitHelpers.GetObjectHandleOnStack<byte[]>(ref o));
return o;
}
不得行,那只是传个intptr,还是报错
原型形参就是array of byte
不能套用VC的经验
对应C#的ref byte[]
原型是对方给我的,delphi写的,就是array of byte,不是pbyte。我ref byte[]过去就报内存读写错误。。业务就是我组织一段byte[]扔给他处理,哪知道根本无法传递不知道怎么解决,sigh
建议这样:叫对方改接口,改PByte或者其它标准数据结构。要不然NND你给我个VC调用例啊,我可以自己改C#的!
你说的很有道理,我让对方改为pbyte试试。用pbyte的话,我这边是不是ref byte[]就对应了?