//叠加字符
typedef struct
{
    WORD wShowString;                // 预览的图象上是否显示字符,0-不显示,1-显示区域大小*576,单个字符的大小为*32
    WORD wStringSize;                /* 该行字符的长度,不能大于个字符*/
    WORD wShowStringTopLeftX;        /* 字符显示位置的x坐标*/
    WORD wShowStringTopLeftY;        /* 字符名称显示位置的y坐标*/
    char sString[44];                /* 要显示的字符内容*/
}NET_DVR_SHOWSTRINGINFO, *LPNET_DVR_SHOWSTRINGINFO;//叠加字符
typedef struct
{
    DWORD dwSize;
    NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM];                /* 要显示的字符内容*/
}NET_DVR_SHOWSTRING, *LPNET_DVR_SHOWSTRING;void CShowString::OnButok() 
{
    // TODO: Add your control notification handler code here
    int i = m_areaCtrl.GetCurSel();
    m_ShowString.struStringInfo[i].wShowString = m_chkshow;
    memcpy(m_ShowString.struStringInfo[i].sString, m_string, 44);
    m_ShowString.struStringInfo[i].wStringSize = strlen(m_string);
    m_ShowString.struStringInfo[i].wShowStringTopLeftX = m_stringX;
    m_ShowString.struStringInfo[i].wShowStringTopLeftY = m_stringY;    
    if (!NET_DVR_SetDVRConfig(m_lServerID, NET_DVR_SET_SHOWSTRING, m_nChanNum, &m_ShowString, sizeof(NET_DVR_SHOWSTRING)))
    {
        CString sTemp;
        sTemp.Format("ERROR: NET_DVR_SET_SHOWSTRING = %d \n", NET_DVR_GetLastError());
        TRACE(sTemp);
        AfxMessageBox(sTemp);
        return ;
    }
}
主要是两个结构和if (!NET_DVR_SetDVRConfig(m_lServerID, NET_DVR_SET_SHOWSTRING, m_nChanNum, &m_ShowString, sizeof(NET_DVR_SHOWSTRING)))这句怎么写,谢谢了

解决方案 »

  1.   


    //叠加字符
    typedef struct
    {
        WORD wShowString;                // 预览的图象上是否显示字符,0-不显示,1-显示区域大小*576,单个字符的大小为*32
        WORD wStringSize;                /* 该行字符的长度,不能大于个字符*/
        WORD wShowStringTopLeftX;        /* 字符显示位置的x坐标*/
        WORD wShowStringTopLeftY;        /* 字符名称显示位置的y坐标*/
        char sString[44];                /* 要显示的字符内容*/
    }NET_DVR_SHOWSTRINGINFO, *LPNET_DVR_SHOWSTRINGINFO;
    public struct NET_DVR_SHOWSTRINGINFO
    {
    UInt16 wShowString;        
    UInt16 wStringSize;                /* 该行字符的长度,不能大于个字符*/
    UInt16 wShowStringTopLeftX;        /* 字符显示位置的x坐标*/
    UInt16 wShowStringTopLeftY;        /* 字符名称显示位置的y坐标*/
    byte[] sString;
    public NET_DVR_SHOWSTRINGINFO()
    {
    sString=new byte[44];
    }
    }
      

  2.   

    还不如把C++的代码封装成dll,然后在C#中调用呢,搞那么麻烦干什么?
      

  3.   

    我也不想搞这么麻烦,现在是调用人家的API,这个是他的demo
      

  4.   

    上面定义的struct里面的变量都得是Public另外你的函数NET_DVR_SetDVRConfig在哪里声明的?
      

  5.   

    NET_DVR_SetDVRConfig这是海康库中的函数,你导入到C#中,然后直接调用就行了,看一下头文件中结构的对齐方式,C#声明结构明对齐方式要一致,基本上没什么问题;
      

  6.   

    如果没有记错的话,应该是在HCNetSDK.dll
      

  7.   

    原来楼主不知道怎么声明啊using System.Runtime.Intero...[DllImport("DLL文件"]
    private extern static bool NET_DVR_SetDVRConfig(
    ..
    ..
    ..
    ..
    );这样就可以调用了
      

  8.   

    楼上的确实是高手,关键我把api封装了以后怎么调用返回的都是false
      

  9.   

    http://d.namipan.com/d/48c83768a9525ed657ce4b7f4d3a25fe12f1827360526500这个是我封装好的程序,可不可以帮我看下哪里有问题?
      

  10.   

    http://d.namipan.com/d/b8a4141e3229357c6145e56eeeca9f7e0b2e6c8e5c0f4600这个是他本身的SDK和手册
      

  11.   

       if (!NET_DVR_SetDVRConfig(m_lServerID, NET_DVR_SET_SHOWSTRING, m_nChanNum, &m_ShowString, sizeof(NET_DVR_SHOWSTRING)))
        {
            CString sTemp;
            sTemp.Format("ERROR: NET_DVR_SET_SHOWSTRING = %d \n", NET_DVR_GetLastError());
            TRACE(sTemp);
            AfxMessageBox(sTemp);
            return ;
        }这个函数好像本来就是要返回false的吧?你看看这部份的if(!.....)
      

  12.   

    他那个返回的false是错误提示!