前言:
而今小伙伴们对“无法解析外部符号declspecdllimport”大概比较关心,姐妹们都需要分析一些“无法解析外部符号declspecdllimport”的相关资讯。那么小编在网上收集了一些对于“无法解析外部符号declspecdllimport””的相关内容,希望姐妹们能喜欢,大家快快来了解一下吧!第一次开发这里我们先来创建一个简单的控制台应用程序,打开Visual Studio在菜单栏点击文件-->新建-->项目,在弹出新建项目对话框中找到已安装模板-->Visual C++-->Win32项目,点选“控制台应用程序”即可创建一个控制台项目。
引入头文件
在【解决方案管理器】视图中右键选择工程-->属性-->配置属性-->C/C++-->常规,在右边“附加包含目录”中加入hncsdk_V1.31.00的头文件路径。hncsdk_V1.31.00的头文件放在..\hncsdk_V1.31.00\lib\C++\include目录中,这样在项目的“外部依赖项”中就会自动载入hncsdk_V1.31.00中的头文件。
附加库目录
头文件只是对功能函数接口的对外申明,并不具备实际的函数实体,它是程序调用的桥梁,要实现头文件中的函数就必要引入相应的lib文件库。这样用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。该编译器会从库中提取相应的代码,以此来达到保护源码不外漏的作用。同样在【解决方案管理器】视图中右键选择工程-->属性>配置属性->链接器->常规,在右边“附加库目录”中添加hncsdk_V1.31.00的lib库文件路径。
加载lib文件库
附加库目录指定了lib文件库所在的目录,接下来我们还要告诉编译器具体的lib文件库。在【解决方案管理器】视图中右键点击选择工程-->属性->配置属性->链接器->输入,在右边“附加依赖项”中添加具体的lib文件库名,这里我们主要用到了HncNetDllForCpp.lib文件库。
错误:该符号在函数main中被引用
LNK2019 无法解析的外部符号 "__declspec(dllimport) public: __cdecl HncApi::HncApi(void)" (__imp_??0HncApi@@QEAA@XZ),该符号在函数 main 中被引用,这种错误大多是找不到相应的库文件,但是检查自己的项目属性及链接器配置都没有问题,最后通过在Demo发现有添加预处理命令。于是我也在添加头文件处添加预处理指令#pragma comment( lib, "ws2_32.lib"),添加后程序编译成功。ws2_32.lib是Windows Sockets应用程序的接口,用于支持Internet和网络的应用程序。
入门示例:初始化连接
现在我们开始使用接口文档了,通过接口文档我们可以知道使用HNC_NetConnect函数连接之前必须先调用HNC_NetInit函数先初始化网络。HNC_NetInit函数原型为Bit32 HncApi::HNC_NetInit (const Bit8 *ip, uBit16 port, const Bit8 *name),支持重装Bit32 HncApi::HNC_NetInit (const string &ip, uBit16 port, const string &name)。直接在main函数中实例化HncApi来调用HNC_NetInit接口初始化网络,这里IP为上位机本地IP(连接的是适配器上配置的ip和端口)。返回值为0则表示网络初始化成功,返回值为-1则表示网络初始化失败。
总结:
这是C++项目搭建的通用方法,引入必要的头文件和链接库。以上内容是小编给大家分享的【数控采集003:华中数控二次开发项目搭建及环境配置】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。更多数据采集技巧可以参考专栏:
为了方便学习,下面附上本文用到的源码:
// HZSK.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include "hncapi.h"#pragma comment( lib, "ws2_32.lib")int main(){ HncApi *Instance = new HncApi; Bit32 ret = Instance->HNC_NetInit("192.168.137.1", 10001, "CppTest"); printf("%d \n", ret); system("pause"); return 0;}