首页 新闻 会员 周边 捐助

C#调用C++的dll中函数,回调函数执行一次后,程序自动退出

0
[待解决问题]

c++
struct
typedef struct _PREVIEW_CHANNEL_INFO
{
DWORD dwID;
PreviewDataCallback   funcStreamCallback;
}PREVIEW;
定义
typedef int  (WINAPI *PreviewDataCallback)(。。。);

调用

PREVIEW_CHANNEL_INFO_EX openInfo;
memset(&openInfo,0,sizeof(PREVIEW_CHANNEL_INFO));
openInfo.funcStreamCallback = PreviewDataCallback;

ERR_MSG herr = ERR_SUCCESS;
herr = OpenPreviewChn(m_deviceip.GetBuffer(0), m_deviceport,  (PREVIEW_CHANNEL_INFO *)&openInfo, 。。。);


C#
[StructLayout(LayoutKind.Sequential)]
        public struct PREVIEW_CHANNEL_INFO
        {
            public uint dwID;
            public MyPreviewDataCallback funcStreamCallback;
        };

public delegate int MyPreviewDataCallback(。。。); //声明委托  
然后_PREVIEW.PreviewDataCallback= new MyPreviewCallback(PreviewCallbackFunc);
public static int PreviewDataCallbackFunc(。。。)
{

调用

PREVIEW_CHANNEL_INFO openinfo;
openinfo.dwID = cid;
openinfo.PreviewCallback = new MyPreviewCallback(PreviewCallbackFunc);

OpenPreviewChn(txtIP.Text, uint.Parse(txtPort.Text), ref openinfo, out chanelPtr, 。。。更多参数);

 

把struct PREVIEW 作为回调函数的参数传进去,然后执行完回调函数,窗体直接关闭了,没有任何异常,类似这个帖子

http://bbs.csdn.net/topics/370134994 

 

http://q.cnblogs.com/q/73407/ 参考这个问题,不知道有人知道怎么回事不

 

大概是这样,代码可能乱了点

jhlong的主页 jhlong | 初学一级 | 园豆:21
提问于:2015-06-30 18:44
< >
分享
所有回答(3)
0

读GetLastError看看是什么问题。

XiaoFaye | 园豆:3087 (老鸟四级) | 2015-07-01 05:59

没c++的代码,c# 应该不行吧

支持(0) 反对(0) jhlong | 园豆:21 (初学一级) | 2015-07-01 08:57
0

编译成 x86,设置为 stdcall,struct PREVIEW_CHANNEL_INFO 和 struct PREVIEW 需要在整个运行期间保持有效。

Launcher | 园豆:45050 (高人七级) | 2015-07-01 10:35
0

callback函数需要这样定义
typedef int (__stdcall*PreviewDataCallback)(。。。);

Plato | 园豆:197 (初学一级) | 2019-02-23 10:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册