C#调用C++ dll库时的回调函数问题

ahker534 2007-08-22 10:02:46
这是一个工业相机的库,
其中有个CameraDll.MV_EnableDrawDisplay(int CameraNo, bool enableCallback)函数.就是启用回调和禁用的功能.
首先,我禁用回调功能,程序运行正常,有画面显示.
但我启用时,通常在第一次调用回调函数返回时出现错误,不过有时提前就错误了,所以,我感觉是两个方面的问题,一是垃圾回收,二是从GetHdc();到ReleaseHdc(hdc);之间GDI+的强行操作出现问题.
  dll库的原型是:
int MV_SystemInit(int* CameraNo);//C#声明中参数用ref int
int MV_ConfigHDC(int CurrentNumber, HDC hDC);//绘图句柄,C#声明中参数用IntPtr
int MV_SetPreviewCallback(int CurrentNumber, Callback_pFun, LPVOID lpara)//typedef UINT (AFX_CDECL *CALLBACK_PROC)(LPVOID);LPVOID用IntPtr代替,传0亦不影响

delegate uint Callback(IntPtr pPara);
public partial class Form1 : Form
{
static int CameraNo = 0;
static Callback pPreview ;//防止被GC回收
IntPtr hdc;
Graphics gp;

static uint PreviewCallbak(IntPtr pPara)
{
return 0;
}
public Form1()
{
InitializeComponent();
}
~Form1()
{
gp.ReleaseHdc(hdc);
CameraDll.MV_SystemFree();
}
private void Form1_Load(object sender, EventArgs e)
{
int i = CameraDll.MV_SystemInit(ref CameraNo);
CameraNo = 0;//the first Camera is labeled with zero
gp = this.CreateGraphics();//Graphics.FromImage(this.BackgroundImage)
hdc = gp.GetHdc();

i = CameraDll.MV_ConfigHDC(CameraNo, hdc);

pPreview = new Callback(PreviewCallbak);
i = CameraDll.MV_SetPreviewCallback(CameraNo, pPreview, 0);//set callback function
i = CameraDll.MV_SetColorFeature(CameraNo, false, 1, 2000);
//set time of exposure

i = CameraDll.MV_EnableDrawDisplay(CameraNo, false);/* */
      //i is used to watch the return value,and all the values are OK
}
}
...全文
258 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2007-12-19
  • 打赏
  • 举报
回复
typedef UINT (AFX_CDECL *CALLBACK_PROC)(LPVOID);LPVOID用IntPtr代替,传0亦不影响

===============================
你确定?
真相重于对错 2007-12-19
  • 打赏
  • 举报
回复
什么错误
Knight94 2007-12-19
  • 打赏
  • 举报
回复
析构写的顺序不对,

~Form1()
{
gp.ReleaseHdc(hdc);
CameraDll.MV_SystemFree();
}
改为
~Form1()
{
CameraDll.MV_SystemFree();
gp.ReleaseHdc(hdc);
}

110,561

社区成员

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

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

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