请问一下。
我用vc写了一个ocx控件。
里头包含了一个函数long Test(long* pbuffer,long*len){...}
让使用者在外部分配一个足够的内存传递进来,在vc中可以很好调用,但是在C#中这个该如何调用,
C#中是该函数是int Test(ref int pbuffer, ref int len){..}
c#中如果定义一个pbuffer传递进去?
以前一直是使用Intper类型传递,但是现在申明intper后,Test(ref (int)pbuffer,ref len)强制转换也不行。
麻烦大家帮忙下。谢谢
我用vc写了一个ocx控件。
里头包含了一个函数long Test(long* pbuffer,long*len){...}
让使用者在外部分配一个足够的内存传递进来,在vc中可以很好调用,但是在C#中这个该如何调用,
C#中是该函数是int Test(ref int pbuffer, ref int len){..}
c#中如果定义一个pbuffer传递进去?
以前一直是使用Intper类型传递,但是现在申明intper后,Test(ref (int)pbuffer,ref len)强制转换也不行。
麻烦大家帮忙下。谢谢
如果不能改,就用fixed方法取得数组的指针,再将指针用IntPtr.ToInt32 方法 转成整数,传递进去。
你好,Test(ref int pbuffer, ref int len)是自动生成的,好象不能改成int[] pbuffer,
能否有实际的例子提供参考一下。谢谢
在C# 中,我是这样调用。
int len=100;
IntPtr pPtr;
pPtr= Marshal.AllocCoTaskMem(len);//分配足够大的内存
int buffer = pp.ToInt32();
this.MyOcx.Test(ref buffer, ref len);//这步执行出错,这个Test的函数声明是
Test(ref int buffer, ref len).所以要传递int,我有想过传递IntPtr,但是不知道如何强制转换在传递进去,好象是不能用到int[] buffer,
还有没有别的方法吗?
fixed (byte* pb = b)
{
IntPtr ptr = (IntPtr)pb;
int buffer = ptr.ToInt32();
this.MyOcx.Test(ref buffer, ref len)看看这样行不行
谢谢你的代码,
但是运行后还是有错误。。
提示:
An invalid VARIANT was detected during a conversion from an unmanaged VARIANT to a managed object. Passing invalid VARIANTs to the CLR can cause unexpected exceptions, corruption or data loss.
那个ocx的函数。在vc中就是返回了一个内存的buffer,感觉要用Marshal这类的东西,但是一直调用也是出错。。
你的vc OCX 改用 long Test( byte *pbuffer , long *len ){...} 试试