“实时错误‘453’
找不到DLL入口点,MP4_ClientStartup(UINT nMessage,HWND hWnd);in hikclient.h”
而调用MP4_ClientSetNetPort函数时未报错
该头文件在VC中可正常使用。
以下是hikclient.h的全部内容:
enum{UDPMODE=0,TCPMODE,MULTIMODE,DIALING};//网络连接方式
enum{NORMALMODE=0,OVERLAYMODE};//显示模式
#define SUPPORT_DDRAW 1 //支持DIRECTDRAW;
#define SUPPORT_BLT 2 //显卡支持BLT操作;
#define SUPPORT_BLTFOURCC 4 //显卡BLT支持颜色转换;
#define SUPPORT_BLTSHRINKX 8 //显卡BLT支持X轴缩小;
#define SUPPORT_BLTSHRINKY 16 //显卡BLT支持Y轴缩小;
#define SUPPORT_BLTSTRETCHX 32 //显卡BLT支持X轴放大;
#define SUPPORT_BLTSTRETCHY 64 //显卡BLT支持Y轴放大;
#define SUPPORT_CPU 128 //CPU不支持;
#define T_UYVY 1
#define T_YV12 3
#define T_RGB32 7
typedef struct{
BYTE m_bRemoteChannel;//监控的通道
BYTE m_bSendMode;//联接模式
BYTE m_bRight;//权限——保留接口
char *m_sIPAddress;//服务端的IP
char *m_sUserName;
char *m_sUserPassword;
BOOL m_bUserCheck;
HWND m_hShowVideo;
}CLIENT_VIDEOINFO, *PCLIENT_VIDEOINFO;
#define CPLAYER_API extern"C" __declspec(dllimport)
#define RECDATAERR 0 //接收数据异常
#define PLAYERR 1//播放异常
#define REFUSED 2//访问服务器被拒绝
#define VERSIONERR 3//服务器的编码器版本和客户端的解码器版本不匹配,收到数据,但是无法播放
#define PLAYERBUSY 4//CPU太繁忙,解码出现丟帧的情况
#define GETSTRING 10//收到ServerStringToClient发送过来的字符串
CPLAYER_API LONG __stdcall MP4_ClientStart(PCLIENT_VIDEOINFO pClientinfo,void(CALLBACK *ReadDataCallBack)(DWORD nPort,UCHAR *pPacketBuffer,DWORD nPacketSize));
CPLAYER_API BOOL __stdcall MP4_ClientStop(LONG StockHandle);
CPLAYER_API LONG __stdcall MP4_ClientGetState(LONG StockHandle);
CPLAYER_API BOOL __stdcall MP4_ClientStopCapture(LONG StockHandle);
CPLAYER_API BOOL __stdcall MP4_ClientStartCapture(LONG StockHandle);
CPLAYER_API BOOL __stdcall MP4_ClientStartCaptureFile(LONG StockHandle,LPTSTR FileName);
CPLAYER_API WORD __stdcall MP4_ClientGetServerChanNum(LPCTSTR m_sIPAddress);
CPLAYER_API BOOL __stdcall MP4_ClientCommandtoServer(LPCTSTR m_lAddrIP,char *m_sCommand,WORD m_wLen);
CPLAYER_API BOOL __stdcall MP4_ClientCommandtoServer_Handle(LONG StockHandle,char *m_sCommand,WORD m_wLen);
CPLAYER_API BOOL __stdcall MP4_ClientStartup(UINT nMessage,HWND hWnd);
CPLAYER_API BOOL __stdcall MP4_ClientCleanup();
CPLAYER_API BOOL __stdcall MP4_ClientShut(LPCTSTR m_lAddrIP,char cChannel);
CPLAYER_API void __stdcall MP4_ClientReadLastMessage(char *m_sIP,char *m_sCommand,WORD *m_wLen);
CPLAYER_API BOOL __stdcall MP4_ClientAudioVolume(WORD wVolume);
CPLAYER_API BOOL __stdcall MP4_ClientAudioStart(LONG StockHandle);
CPLAYER_API BOOL __stdcall MP4_ClientAudioStop();
CPLAYER_API int __stdcall MP4_ClientIsSupport();
CPLAYER_API BOOL __stdcall MP4_ClientSetBufferNum(LONG StockHandle,WORD wBufNum);
CPLAYER_API BOOL __stdcall MP4_ClientSetNetPort(WORD dServerPort,WORD dClientPort);
//2.0版本增加
CPLAYER_API BOOL __stdcall MP4_ClientSetTTL(unsigned char cTTLVal);
//2.4版本增加
//设置接收DelayLen K 数据后开始播放(DelayLen:0-600)
CPLAYER_API BOOL __stdcall MP4_ClientSetPlayDelay(LONG StockHandle,WORD DelayLen);
//设置连接等待时间,dEachWaitTime表示每次连接的等待时间(单位:毫秒)300-10000,默认2000,dTrynum表示尝试连接的次数(单位:次)1-50,默认2
CPLAYER_API BOOL __stdcall MP4_ClientSetWait(DWORD dEachWaitTime,DWORD dTrynum);
CPLAYER_API BOOL __stdcall MP4_ClientSetShowMode(DWORD dShowType,COLORREF colorKey);
CPLAYER_API BOOL __stdcall MP4_ClientSetQuality(LONG StockHandle,WORD wPicQuality);
CPLAYER_API BOOL __stdcall MP4_ClientSetCapPicCallBack(LONG StockHandle,void (CALLBACK* CapPicFun)(long StockHandle,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReceaved));
CPLAYER_API BOOL __stdcall MP4_ClientSavePicFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName);
CPLAYER_API BOOL __stdcall MP4_ClientThrowBFrame(LONG StockHandle,DWORD dNum);
//2.5版本增加
CPLAYER_API DWORD __stdcall MP4_ClientGetSdkVersion();
CPLAYER_API DWORD __stdcall MP4_ClientGetFrameNum(LONG StockHandle);
10 个解决方案
#1
不明白,即然在VC下能运行通过,那么在VB里就可以调用的!
#2
所有的CPLAYER_API改成 extern "C" CPLAYER_API
extern "C"表示可以使其他编程语言访问你编写的DLL中的函数
extern "C"表示可以使其他编程语言访问你编写的DLL中的函数
#3
还有一点,最好这样:
把你要export的函数写在def中。
把你要export的函数写在def中。
#4
#define CPLAYER_API extern"C" __declspec(dllimport)
定义宏CPLAYER_API时,本身就包含了extern "C"了,为什么还要再加上extern "C"?
定义宏CPLAYER_API时,本身就包含了extern "C"了,为什么还要再加上extern "C"?
#5
I think you should export the function to VB application. for example:
#define CPLAYER_API extern "C" __declspec(dllexport) and you should define a .def file to export the function name.
you may try it :-)
#define CPLAYER_API extern "C" __declspec(dllexport) and you should define a .def file to export the function name.
you may try it :-)
#6
#define CPLAYER_API extern"C" __declspec(dllimport)
把extern"C"去掉试一试,
把extern"C"去掉试一试,
#7
这个问题只能使用DEF文件来解决,我遇到过这样的问题.VB就只能这样子了.
#8
同意楼上的,不知道为什么dllexport跟.DEF文件定义的就是不一样。
我的程序也是只有用.DEF定义的出口才有效,不知道为什么?
还有:
#define CPLAYER_API extern"C" __declspec(dllimport)
应当是:
#define CPLAYER_API extern"C" __declspec(dllexport)
吧!
我的程序也是只有用.DEF定义的出口才有效,不知道为什么?
还有:
#define CPLAYER_API extern"C" __declspec(dllimport)
应当是:
#define CPLAYER_API extern"C" __declspec(dllexport)
吧!
#9
如果像你们说的那样,应该所有的函数都不能用,可是在调用
MP4_ClientSetNetPort(WORD dServerPort,WORD dClientPort);
的时候没有报错。
MP4_ClientSetNetPort(WORD dServerPort,WORD dClientPort);
的时候没有报错。
#10
vb对dll 的要求比较严格, 用__declspec(dllexport) 申明的函数能够被调用,但是出现调用约定错误, 用 __export WINAPI 申明就可以了. 在vc6里面默认的环境__export WINAPI是个warning ,不能生成dll 文件. 但是在bcb 里面却一切正常.
#1
不明白,即然在VC下能运行通过,那么在VB里就可以调用的!
#2
所有的CPLAYER_API改成 extern "C" CPLAYER_API
extern "C"表示可以使其他编程语言访问你编写的DLL中的函数
extern "C"表示可以使其他编程语言访问你编写的DLL中的函数
#3
还有一点,最好这样:
把你要export的函数写在def中。
把你要export的函数写在def中。
#4
#define CPLAYER_API extern"C" __declspec(dllimport)
定义宏CPLAYER_API时,本身就包含了extern "C"了,为什么还要再加上extern "C"?
定义宏CPLAYER_API时,本身就包含了extern "C"了,为什么还要再加上extern "C"?
#5
I think you should export the function to VB application. for example:
#define CPLAYER_API extern "C" __declspec(dllexport) and you should define a .def file to export the function name.
you may try it :-)
#define CPLAYER_API extern "C" __declspec(dllexport) and you should define a .def file to export the function name.
you may try it :-)
#6
#define CPLAYER_API extern"C" __declspec(dllimport)
把extern"C"去掉试一试,
把extern"C"去掉试一试,
#7
这个问题只能使用DEF文件来解决,我遇到过这样的问题.VB就只能这样子了.
#8
同意楼上的,不知道为什么dllexport跟.DEF文件定义的就是不一样。
我的程序也是只有用.DEF定义的出口才有效,不知道为什么?
还有:
#define CPLAYER_API extern"C" __declspec(dllimport)
应当是:
#define CPLAYER_API extern"C" __declspec(dllexport)
吧!
我的程序也是只有用.DEF定义的出口才有效,不知道为什么?
还有:
#define CPLAYER_API extern"C" __declspec(dllimport)
应当是:
#define CPLAYER_API extern"C" __declspec(dllexport)
吧!
#9
如果像你们说的那样,应该所有的函数都不能用,可是在调用
MP4_ClientSetNetPort(WORD dServerPort,WORD dClientPort);
的时候没有报错。
MP4_ClientSetNetPort(WORD dServerPort,WORD dClientPort);
的时候没有报错。
#10
vb对dll 的要求比较严格, 用__declspec(dllexport) 申明的函数能够被调用,但是出现调用约定错误, 用 __export WINAPI 申明就可以了. 在vc6里面默认的环境__export WINAPI是个warning ,不能生成dll 文件. 但是在bcb 里面却一切正常.