从非托管代码向托管代码的转化问题

wanderfox 2007-08-07 10:54:53
我想要在C#下调用一个c语言编写的动态库中的某函数,该函数声明如下:
AUX_RGBImageRec * APIENTRY auxDIBImageLoad(LPCWSTR);
其中AUX_RGBImageRec为一个结构体:
typedef struct _AUX_RGBImageRec {
GLint sizeX, sizeY;
unsigned char *data;
} AUX_RGBImageRec;
请问该如何把这个函数移植到c#下?我考虑的是把函数
声明为:public static extern IntPtr auxDIBImageLoad(string);
结构体AUX_RGBImageRec声明为
struct AUX_RGBImageRec
{
int sizex;
int sizey;
IntPtr data;
};
然后不知该怎么做了,忘高手帮忙解决一下,谢谢。
...全文
184 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyong_cd 2007-08-08
  • 打赏
  • 举报
回复
先在类中,方法外申明
[DllImport("XXXX.dll")]
internal static extern AUX_RGBImageRec auxDIBImageLoad(s);

然后再在方法中象调C#的方法一样调了
qqchen79 2007-08-08
  • 打赏
  • 举报
回复
GLint的C定义是什么?如果是int就简单了:

struct AUX_RGBImageRec {
int sizeX, sizeY;
IntPtr data;
}

public static extern IntPtr auxDIBImageLoad(string);

然后用Marshal.PtrToStructure把IntPtr转换成structure。
读data数据用Marshal.Copy。
空间可以用Marshal.FreeHGlobal释放。

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧