导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

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

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;
};
然后不知该怎么做了,忘高手帮忙解决一下,谢谢。
...全文
148 点赞 收藏 2
写回复
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释放。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.