C++Builder使用海康SDK报错的问题

木叶流丹 2017-04-19 07:43:54
使用CB6对海康SDK进行二次开发,调用海康 "HCNetSDK.h"文件,初始化都报错。
主程序Main.cpp:
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
unsigned int iLastErr = 0;
int m_lUserID = -1;
bool m_bInitSDK = false;
bool m_bRecord = false;
int m_lRealHandle = -1;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
m_bInitSDK = NET_DVR_Init() ;
if (m_bInitSDK == false)
{
ShowMessage("NET_DVR_Init error!") ;
}
else
{
//保存SDK日志 To save the SDK log
NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true) ;
}
}
//---------------------------------------------------------------------------
//登录
void __fastcall TfrmMain::btnLoginClick(TObject *Sender)
{
if (edtIP->Text==""||edtPort->Text==""||edtUser->Text==""||edtPsw->Text=="")
{
ShowMessage("请输入设备地址、端口、用户名和密码!") ;
return ;
}
if (m_lUserID < 0)
{
String DVRIPAddress = edtIP->Text ; //设备IP地址或者域名
int DVRPortNumber = edtPort->Text.ToInt() ; //设备服务端口号
String DVRUserName = edtUser->Text ; //设备登录用户名
String DVRPassword = edtPsw->Text ; //设备登录密码
NET_DVR_DEVICEINFO_V30 DeviceInfo ;
//登录设备
m_lUserID = NET_DVR_Login_V30(DVRIPAddress.c_str(), DVRPortNumber, DVRUserName.c_str(), DVRPassword.c_str(), &DeviceInfo) ;
if (m_lUserID < 0)
{
iLastErr = NET_DVR_GetLastError() ;
str = "NET_DVR_Login_V30 failed, error code= " + iLastErr ; //登录失败,输出错误号
ShowMessage(str) ;
return ;
}
else
{
//登录成功
ShowMessage("Login Success!") ;
btnLogin->Caption = "Logout" ;
}
}
else
{
//注销登录 Logout the device
if (m_lRealHandle >= 0)
{
ShowMessage("Please stop live view firstly") ;
return ;
}

if (!NET_DVR_Logout(m_lUserID))
{
iLastErr = NET_DVR_GetLastError() ;
str = "NET_DVR_Logout failed, error code= " + iLastErr ;
ShowMessage(str) ;
return ;
}
m_lUserID = -1 ;
btnLogin->Caption = "Login" ;
}
}
//---------------------------------------------------------------------------

头文件Main.h:
//---------------------------------------------------------------------------

#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <ExtCtrls.hpp>
#include <StdCtrls.hpp>
#include "HCNetSDK.h"
//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published: // IDE-managed Components
TImage *imgPreview;
TPanel *pnlPreview;
TLabel *lblIP;
TEdit *edtIP;
TEdit *edtPort;
TLabel *lblPort;
TEdit *edtUser;
TLabel *lblUser;
TEdit *edtPsw;
TLabel *lblPsw;
TButton *btnLogin;
TButton *btnPreview;
TLabel *lblChannel;
TEdit *edtChannel;
void __fastcall FormCreate(TObject *Sender);
void __fastcall btnLoginClick(TObject *Sender);
void __fastcall btnPreviewClick(TObject *Sender);
private: // User declarations
String str ;
public: // User declarations
__fastcall TfrmMain(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif


报错信息:
[Linker Error] Unresolved external 'NET_DVR_Init' referenced from G:\MY_CBUILDER\PERSONAL\PREV\MAIN.OBJ
[Linker Error] Unresolved external 'NET_DVR_SetLogToFile' referenced from G:\MY_CBUILDER\PERSONAL\PREV\MAIN.OBJ
[Linker Error] Unresolved external 'NET_DVR_Login_V30' referenced from G:\MY_CBUILDER\PERSONAL\PREV\MAIN.OBJ
[Linker Error] Unresolved external 'NET_DVR_Logout' referenced from G:\MY_CBUILDER\PERSONAL\PREV\MAIN.OBJ
[Linker Error] Unresolved external 'NET_DVR_GetLastError' referenced from G:\MY_CBUILDER\PERSONAL\PREV\MAIN.OBJ

海康 "HCNetSDK.h"文件部分内容
/********************************SDK接口函数声明*********************************/
NET_DVR_API BOOL __stdcall NET_DVR_Init();
NET_DVR_API BOOL __stdcall NET_DVR_Cleanup();

//NET_DVR_SetDVRMessage的扩展
#ifdef _WIN32
NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessage(UINT nMessage,HWND hWnd);
NET_DVR_API BOOL __stdcall NET_DVR_SetExceptionCallBack_V30(UINT nMessage, HWND hWnd, void (CALLBACK* fExceptionCallBack)(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser), void *pUser);
#elif defined(__linux__) || defined(__APPLE__)
NET_DVR_API BOOL __stdcall NET_DVR_SetExceptionCallBack_V30(UINT reserved1, void* reserved2, void (CALLBACK* fExceptionCallBack)(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser), void *pUser);
/*Linux专有 */
#if defined(__linux__)
NET_DVR_API BOOL NET_DVR_DrawAreaInit(INITINFO InitInfo, DWORD iUseSDL = 1);
NET_DVR_API BOOL NET_DVR_DrawAreaRelease();
#endif
#endif
...全文
1090 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_50869063 2021-06-16
  • 打赏
  • 举报
回复

Project->add to project,添加HCNetSDK.lib

我不懂电脑 2017-04-21
  • 打赏
  • 举报
回复
很好的经验。
ooolinux 2017-04-19
  • 打赏
  • 举报
回复
不错不错,分享有价
木叶流丹 2017-04-19
  • 打赏
  • 举报
回复
继续百度:用C++Builder6.0 调用三方VC做的lib文件时,编译的时候出现如下错误: “contains invalid OMF record, type 0x21 (possibly COFF)” 必须将lib先转换成CB格式的,需要使用CB安装目录下bin里的coff2omf工具。 转换步骤: 1.在系统路径Path里加入“C:\Program Files\Borland\CBuilder6\Bin”; 2.将VC的lib文件“HCNetSDK.lib”拷贝到G盘; 3.cmd 进入 G盘; 4.coff2omf -lib:ms HCNetSDK.lib bcb HCNetSDK_1.lib 5.提示:COFF to OMF Converter Version 1.2.0 Copyright (c) 1999-2009 Embarcadero Technolo gies, Inc. All rights reserved. 转换成功 6.加入CB工程,编译通过。 完美解决
木叶流丹 2017-04-19
  • 打赏
  • 举报
回复
网上说是只是加入了HCNetSDK.h,没有加入HCNetSDK.cpp或者lib即函数实现,于是在工程中加入HCNetSDK.lib,还是报错: [Linker Error] 'G:\MY_CBUILDER\PERSONAL\PREV\HCNETSDK.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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