vc ++ dll某些功能不起作用

编程入门 行业动态 更新时间:2024-10-13 02:17:46
本文介绍了vc ++ dll某些功能不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

头文件

header file

#include "StdAfx.h" #include "MainFrm.h" #include "DlgView.h" //#include "ViewImage.h" //#include "DlgSelectResolution.h" #include "afx.h" #include "iostream" #include "fstream" using namespace std; #ifdef ISILCARD_EXPORTS #define ISILCARD_API extern "C" __declspec(dllexport) #else #define ISILCARD_API extern "C" __declspec(dllimport) #endif ISILCARD_API ISILERR_CODE __stdcall ISIL_Card_RegEncode2Callback(CardEncode2CallBack funCallBack,void *pContext); #define TRUE 1 CFile m_hFileV ; CFile m_hFileA; unsigned int m_nChannelID; long m_nWriteAudioDataSize; int nChannel; bool m_bNeedIFrame ; unsigned char m_cWriteSPSpps ; BOOL g_bRecordToTwoFile1= 1; DWORD m_dwPreTime ; int m_nFpsPrint ; int m_nFrameCount ; bool m_bOpenEncode[MAX_CHANNEL]; unsigned int i; //HANDLE g_hChannel[MAX_CHANNEL] ; //typedef void (_stdcall *CardEncode2CallBack)(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData,void *pContext); class MainClass { private: CDlgView *m_pDlgView[MAX_VIEW_TYPE_NUM]; // CDlgView *m_pDlgView[MAX_VIEW_TYPE_NUM]; MainClass* m_pViewWnd[MAX_CHANNEL] ; // bool m_bOpenEncode[MAX_CHANNEL]; int m_nViewObj ; unsigned int m_nChannelID; public: MainClass(void); ~MainClass(void); public: //CFile m_hFileV1 ; CFile m_hFileA ; //DWORD m_dwPreTime ; int m_nFpsPrint ; int m_nFrameCount ; public: int __stdcall StartCard(); int __stdcall StartChannel(int ChannelID); int __stdcall SetChannalEncode(HANDLE nChID, int streamType); int __stdcall RegCallBack(); void Invalidate(); void OpenFile1(BOOL bMainStream); //void OpenFile(DWORD strFileName); int __stdcall CB_CardEncode2(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData,void *pContext); int __stdcall CB_CardReadEncode(unsigned int nChannel,void *pContext); void WriteBareStreamV1(unsigned int nChannel,unsigned char cDataType,void* pBuffer, unsigned long lBufSize); int WriteBareStream(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData); void WriteBareStreamV(unsigned char cDataType,void* pBuffer, unsigned long lBufSize); //void WriteBareStreamV(unsigned char cDataType,void* pBuffer, unsigned long lBufSize); void WriteBareStreamA1(void* pBuffer, unsigned long lBufSize); void WriteBareStreamA(unsigned int nChannel,void* pBuffer, unsigned long lBufSize); //void WriteBareStreamA(void* pBuffer, unsigned long lBufSize); //ISIL_Card_StartCapEncode(HANDLE hChannel, bool bSub = false); //void OpenFile1(DWORD strFileName); int __stdcall StartRecording(int nChannel,DWORD strfileName); }; ////////////////////////////////////////

cpp文件

cpp file

#include "stdafx.h" #include "afxwin.h" #include <math.h> #include "MainClass.h" #include "CardDemo.h" #include <io.h> //#include "DlgView.h" //#include "ViewImage.h" //#include "DlgSelectResolution.h" #include <iostream> #include <fstream> extern "C" { MainClass::MainClass(void) { } ///////////////////////////////////////////////////////////////// void WriteBareStreamV(unsigned char cDataType,void* pBuffer, unsigned long lBufSize) { DWORD dwTime = timeGetTime() ; if ( dwTime - m_dwPreTime > 1000 ) { m_dwPreTime = dwTime ; m_nFpsPrint = m_nFrameCount ; //this->Invalidate(); m_nFrameCount = 0 ; } else { if( cDataType == ISIL_DATA_TYPE_MAIN_I || cDataType == ISIL_DATA_TYPE_MAIN_P|| cDataType == ISIL_DATA_TYPE_MAIN_B || cDataType == ISIL_DATA_TYPE_SUB_I || cDataType == ISIL_DATA_TYPE_SUB_P || cDataType == ISIL_DATA_TYPE_SUB_B ) { m_nFrameCount++; } } if(m_hFileV.m_hFile != NULL) { if( ( m_cWriteSPSpps == (ISIL_DATA_TYPE_MAIN_SPS|ISIL_DATA_TYPE_MAIN_PPS) ) || ( m_cWriteSPSpps == (ISIL_DATA_TYPE_SUB_SPS|ISIL_DATA_TYPE_SUB_PPS) ) ) { if(m_bNeedIFrame) { if(cDataType == ISIL_DATA_TYPE_MAIN_I || cDataType == ISIL_DATA_TYPE_SUB_I) { m_hFileV.Write(pBuffer, lBufSize); m_bNeedIFrame = false ; } } else { m_hFileV.Write(pBuffer, lBufSize); } return ; } if(cDataType == ISIL_DATA_TYPE_MAIN_SPS || cDataType == ISIL_DATA_TYPE_SUB_SPS) { m_cWriteSPSpps = cDataType ; m_hFileV.Write(pBuffer, lBufSize); return ; } if(cDataType == ISIL_DATA_TYPE_MAIN_PPS || cDataType == ISIL_DATA_TYPE_SUB_PPS) { if( (m_cWriteSPSpps == ISIL_DATA_TYPE_MAIN_SPS) || (m_cWriteSPSpps == ISIL_DATA_TYPE_SUB_SPS)) { m_cWriteSPSpps |= cDataType; m_hFileV.Write(pBuffer, lBufSize); return ; } } } }//////////////////////tn/////////////////// void WriteBareStreamV1(unsigned int nChannel,unsigned char cDataType,void* pBuffer, unsigned long lBufSize) { if( nChannel < g_nChannelTotal ) { WriteBareStreamV(cDataType,pBuffer,lBufSize); } } void WriteBareStreamA1(void* pBuffer, unsigned long lBufSize) { if(m_hFileA.m_hFile != NULL) { m_hFileA.Write(pBuffer, lBufSize); m_nWriteAudioDataSize += lBufSize; } } void WriteBareStreamA(unsigned int nChannel,void* pBuffer, unsigned long lBufSize) { if( nChannel < g_nChannelTotal ) WriteBareStreamA1(pBuffer,lBufSize); } ///////////////////////////////// void Invalidate() { BOOL bErase=1; } //void WriteBareStreamA(void* pBuffer, unsigned long lBufSize); int WriteBareStream(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData) { switch (pEncData->cDataType) { case ISIL_DATA_TYPE_MAIN_SPS: case ISIL_DATA_TYPE_MAIN_PPS: case ISIL_DATA_TYPE_MAIN_I: case ISIL_DATA_TYPE_MAIN_P: case ISIL_DATA_TYPE_MAIN_B: WriteBareStreamV1(nChannel,pEncData->cDataType,pEncData->pBuffer, pEncData->lBufSize); break; case ISIL_DATA_TYPE_SUB_SPS: case ISIL_DATA_TYPE_SUB_PPS: case ISIL_DATA_TYPE_SUB_I: case ISIL_DATA_TYPE_SUB_P: case ISIL_DATA_TYPE_SUB_B: WriteBareStreamV1(nChannel,pEncData->cDataType,pEncData->pBuffer, pEncData->lBufSize); break; case ISIL_DATA_TYPE_A: if(g_bRecordToTwoFile1) WriteBareStreamA(nChannel,pEncData->pBuffer, pEncData->lBufSize); else WriteBareStreamV1(nChannel,pEncData->cDataType,pEncData->pBuffer, pEncData->lBufSize); break; } return 1; } __declspec(dllexport) int __stdcall CB_CardEncode2(unsigned int nCh,ISIL_ENCODE_DATA *pEncData,void *pContext) { ////////////FILEcreate///////// FILE *P=fopen("c:/Record/TP5.txt","w"); fprintf(P, "i am card encode2!!!"); fclose(P); unsigned int nChannel = GetFactChannelIDEx(nCh); int x=WriteBareStream(nChannel,pEncData); return x; } __declspec(dllexport) int __stdcall CB_CardReadEncode(unsigned int nChannel,void *pContext) { return 1; } void OpenFile1(BOOL bMainStream) { if(m_hFileV.m_hFile != NULL) CreateDirectory("c:\\Record\\ ", NULL) ; char szFile[125]; SYSTEMTIME st; GetLocalTime(&st); sprintf(szFile,"c:\\Record\\Main_CH%02d_Time%02d%02d%02d.h264",m_nChannelID+1, st.wHour, st.wMinute, st.wSecond); m_hFileV.Open(szFile, CFile::modeCreate|CFile::modeReadWrite); } ///////////////////////////////////////////////////////////////// __declspec(dllexport) int __stdcall RegCallBack() { //if(g_nCardTotal == 0) // return ; FILE *P=fopen("c:/Record/TP.txt","w"); fprintf(P, "TESTING!!!"); fclose(P); int i =ISIL_Card_RegEncode2Callback((CardEncode2CallBack)CB_CardEncode2,NULL); i= ISIL_Card_RegReadEncodeCallback((CardReadEncodeCallBack)CB_CardReadEncode, NULL); return i; } __declspec(dllexport) int __stdcall StartCard() { unsigned int i ; unsigned int g_nCardTotal = 0 ; unsigned int g_nChannelTotal = 0 ; ISIL_Card_Init() ; // if( ISIL_Card_Init() == ISIL_ERR_SUCCESS ) { unsigned long lCardTotal = 0 ; if(ISIL_Card_GetCardCount(&lCardTotal) == ISIL_ERR_SUCCESS ) { unsigned long lChannelTotal = 0 ; if(ISIL_Card_GetChannelCount(&lChannelTotal) == ISIL_ERR_SUCCESS ) { g_nCardTotal = (unsigned int)lCardTotal; g_nChannelTotal = (unsigned int)lChannelTotal; } } } // Êý¾ÝÖ¡µÄÆðʼʱ¼ä ISIL_VIDEO_STANDARD vs[3]; vs[0] = ISIL_VIDEO_STANDARD_NTSC ; vs[1] = ISIL_VIDEO_STANDARD_PAL ; vs[2] = ISIL_VIDEO_STANDARD_SECAM ; int nSel = 1; for (i=0; i<g_ncardtotal;> { ISIL_Card_SetVideoStandard(i,vs[nSel]); ISIL_Card_SetAutoResetTime(i, 0); } return g_nChannelTotal; RegCallBack(); } __declspec(dllexport) int __stdcall StartChannel(int ChannelID) { HANDLE g_hChannel = NULL ; int intStatus =ISIL_Card_OpenChannel(ChannelID, g_hChannel); ISIL_AUDIO_TYPE audioType[4]; audioType[0]=ISIL_AUDIO_PCM; // audioType[1]=ISIL_AUDIO_ALAW; // audioType[2]=ISIL_AUDIO_ULAW; audioType[1]=ISIL_AUDIO_ADPCM; // 3->1 int nSel = 0; ISIL_Card_SetAudioType(g_hChannel,audioType[nSel]); //////// bool bHFlip = false; bool bVFlip = false; ISIL_Card_SetVideoFlip(g_hChannel, bHFlip, bVFlip); // int nBrightness = 112; //Alice int nContrast = 128; int nSaturation = 115; //Alice int nHue = 128; ISIL_Card_SetVideoPara(g_hChannel, nBrightness, nContrast, nSaturation, nHue); // ISIL_Card_SetEncPriority(g_hChannel,0); //nPri: [0,3] return intStatus; } __declspec(dllexport) int __stdcall SetChannalEncode(HANDLE nChID, int streamType) { int intStatus=ISIL_Card_SetStreamType(nChID,streamType,false); return intStatus; } __declspec(dllexport) int __stdcall StartRecording(int nChannel,DWORD strfileName) { OpenFile1(TRUE); if(ISIL_Card_StartCapEncode(g_hChannel[nChannel-1],true)== ISIL_ERR_SUCCESS) m_bOpenEncode[i] = true ; FILE *X=fopen("c:/Record/newfile.txt","w"); fprintf(X, "I AM IN sTARTRECORDING!!!"); fclose(X); return TRUE ; } MainClass::~MainClass(void) { } }

我正在使用project function创建一个dll.有些功能正在运行,例如

i am creating a dll using project function.there are some function are working like

int __stdcall StartCard(); int __stdcall StartChannel(int ChannelID); int __stdcall SetChannalEncode(HANDLE nChID, int streamType);

但无法使用某些功能

but not working some function

int __stdcall RegCallBack(); int __stdcall CB_CardEncode2(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData,void *pContext); int __stdcall CB_CardReadEncode(unsigned int nChannel,void *pContext); void WriteBareStreamV1(unsigned int nChannel,unsigned char cDataType,void* pBuffer, unsigned long lBufSize); int WriteBareStream(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData); void WriteBareStreamV(unsigned char cDataType,void* pBuffer, unsigned long lBufSize); //void WriteBareStreamV(unsigned char cDataType,void* pBuffer, unsigned long lBufSize); void WriteBareStreamA1(void* pBuffer, unsigned long lBufSize); void WriteBareStreamA(unsigned int nChannel,void* pBuffer, unsigned long lBufSize); //void WriteBareStreamA(void* pBuffer, unsigned long lBufSize); //ISIL_Card_StartCapEncode(HANDLE hChannel, bool bSub = false); //void OpenFile1(DWORD strFileName); int __stdcall StartRecording(int nChannel,DWORD strfileName);

请帮助我,我在哪里走错了路. 请给我建议. 谢谢 [edit]已排序的代码块-OriginalGriff [/edit] 当编译代码CB_CardEncode2函数未读取时,表示控件未转到CB_CardEncode2 功能; int __stdcall CB_CardEncode2(unsigned int nChannel,ISIL_ENCODE_DATA * pEncData,void * pContext); 请帮帮我. 谢谢......

Please help me and where am i going wrong way. please give me suggation. Thanks [edit]Code blocks sorted - OriginalGriff[/edit] when the compile the code CB_CardEncode2 function not read means control not goes to CB_CardEncode2 function; int __stdcall CB_CardEncode2(unsigned int nChannel,ISIL_ENCODE_DATA *pEncData,void *pContext); Please help me. Thanks...............

推荐答案

FILE *P=fopen("c:/Record/TP.txt","w");

我认为这些路径分隔符不起作用.尝试使用''\\''.

I don''t think these path delimiters will work. Try ''\\'' instead.

也许是愚蠢的问题,但是您是否检查/更新了DLL的DEF文件? Sasa maybe stupid question, but did you check/update DEF file of your dll ? Sasa

更多推荐

vc ++ dll某些功能不起作用

本文发布于:2023-11-23 01:15:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1619582.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不起作用   功能   vc   dll

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!