我是把c++做的程序转换成c#程序,
1.对c++中参数类型是void*,而实际上是对应的一维数组的地方,我这样做通过:
IntPtr p = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, (uint)m_pImgData.Length);
if (p == IntPtr.Zero)
{
throw new OutOfMemoryException();
}
else
{
Marshal.Copy(m_pImgData, 0, p, m_pImgData.Length);
}
GLU.gluBuild2DMipmaps(GL.GL_TEXTURE_2D, 3, _imgbmpWidth2, g_imgbmpHeight2, GL.GL_BGR_EXT, GL.GL_UNSIGNED_byte, p);//第七个参数类型声明为IntPtr
LocalFree(p);
2.对对c++中参数类型是GLvoid*,而实际上是对应的二维数组的地方,我这样做通过:
object np = m_terrain;//m_terrain是浮点型二维数组
GL.glVertexPointer(3,GL.GL_FLOAT,0,ref np);//第三个参数类型声明为ref object3.可是现在有个这样的函数
glDrawElements(GL_TRIANGLE_STRIP,bmpHeight*2,GL_UNSIGNED_INT,&m_index[x*g_terbmpHeight1*2+bmpStartH*2)];
//原型是glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
//m_index是一维整数数组,
请教第三个地方怎么转换成c#程序?我用前两种方法都不行了,报错。
1.对c++中参数类型是void*,而实际上是对应的一维数组的地方,我这样做通过:
IntPtr p = LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, (uint)m_pImgData.Length);
if (p == IntPtr.Zero)
{
throw new OutOfMemoryException();
}
else
{
Marshal.Copy(m_pImgData, 0, p, m_pImgData.Length);
}
GLU.gluBuild2DMipmaps(GL.GL_TEXTURE_2D, 3, _imgbmpWidth2, g_imgbmpHeight2, GL.GL_BGR_EXT, GL.GL_UNSIGNED_byte, p);//第七个参数类型声明为IntPtr
LocalFree(p);
2.对对c++中参数类型是GLvoid*,而实际上是对应的二维数组的地方,我这样做通过:
object np = m_terrain;//m_terrain是浮点型二维数组
GL.glVertexPointer(3,GL.GL_FLOAT,0,ref np);//第三个参数类型声明为ref object3.可是现在有个这样的函数
glDrawElements(GL_TRIANGLE_STRIP,bmpHeight*2,GL_UNSIGNED_INT,&m_index[x*g_terbmpHeight1*2+bmpStartH*2)];
//原型是glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
//m_index是一维整数数组,
请教第三个地方怎么转换成c#程序?我用前两种方法都不行了,报错。
代码最好用csdn的标记
这样杂乱的看的头疼。
1、我不知道怎样用csdn标记
glDrawElements(GL_TRIANGLE_STRIP,bmpHeight*2,GL_UNSIGNED_INT,&m_index[x*g_terbmpHeight1*2+bmpStartH*2)];
//原型是glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
//m_index是一维整数数组,
2.c#怎样传址?
加入一个数组
int[] a=new int[5];
怎样a[3]地址才传给别人?
直接用void*
加入一个数组
int[] a=new int[5];
怎样a[3]地址才传给别人? 貌似托管代码是做不到的
{
int *pa3= pa+3; //pa3就是a[3]的地址
}
怎么用IntPtr封送处理?
void* stemp = hglobal.ToPointer();
//call glDrawElements (...)
Marshal.FreeHGlobal(hglobal);这样好像可以试试。
//取a[3]的地址
IntPtr addr=System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement(a,3)