ldcsaa / HP-Socket

High Performance TCP/UDP/HTTP Communication Component

Home Page:https://www.oschina.net/p/hp-socket

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

采用源码引入的方式报错: 无法解析的外部符号

hhbusui opened this issue · comments

问题

采用源码引入的方式,加载hpsocket,目录结构如下

image

只要我引入CUdpCastPtr 就报错。

LNK2019 无法解析的外部符号 __imp__HP_Create_UdpCast,该符号在函数 "public: static class IUdpCast * __cdecl UdpCast_Creator::Create(class IUdpCastListener *)" (?Create@UdpCast_Creator@@SAPAVIUdpCast@@PAVIUdpCastListener@@@z) 中被引用
LNK2019 无法解析的外部符号 __imp__HP_Destroy_UdpCast,该符号在函数 "public: static void __cdecl UdpCast_Creator::Destroy(class IUdpCast *)" (?Destroy@UdpCast_Creator@@SAXPAVIUdpCast@@@z) 中被引用

环境

vs2015 + win10 项目属性中配置如下
image

image

部分代码

#include "UdpSocket.h"

#include <thread>
#include <iostream>
using namespace std;


//#include "HPSocket/Include/HPSocket/HPSocket.h"



UdpSocket* UdpSocket::m_pUdpSocket = nullptr;

UdpSocket * UdpSocket::getInstance()
{
	if (m_pUdpSocket == nullptr)
	{
		m_pUdpSocket = new UdpSocket;
	}
	return m_pUdpSocket;
}

void UdpSocket::destory()
{
	//if(m_pUdpCastPtr)


	if (m_pUdpSocket == nullptr)
	{
		delete m_pUdpSocket;
		m_pUdpSocket = nullptr;
	}
}

void UdpSocket::start(char* addr, short port)
{
	//LPCTSTR addrStr = rep addr;

	// options
	m_pUdpCastPtr->SetCastMode(CM_MULTICAST);
	m_pUdpCastPtr->SetMultiCastLoop(TRUE);
	m_pUdpCastPtr->SetReuseAddressPolicy(RAP_ADDR_AND_PORT);
	m_pUdpCastPtr->SetMultiCastTtl(1);

	// start
	BOOL startRet = m_pUdpCastPtr->Start(addr, port);
	if (!startRet)
	{
		cout << "start error! " << endl;
		return;
	}

	cout << "start ok! " << endl;

	// 阻塞线程不退出
	while (true)
	{
	}

}

void UdpSocket::stop()
{
}

UdpSocket::UdpSocket()
	: m_pUdpSocketImpl(new UdpSocketImpl)
	, m_pUdpCastPtr(m_pUdpSocketImpl)
{

}

#include "UdpSocketImpl.h"

#include <iostream>

#include "./WpnpExternalLogic.h"

using namespace std;

EnHandleResult UdpSocketImpl::OnPrepareConnect(IUdpCast * pSender, CONNID dwConnID, SOCKET socket)
{
	return HR_OK;
}

EnHandleResult UdpSocketImpl::OnSend(IUdpCast * pSender, CONNID dwConnID, const BYTE * pData, int iLength)
{
	return HR_OK;
}

EnHandleResult UdpSocketImpl::OnReceive(IUdpCast * pSender, CONNID dwConnID, const BYTE * pData, int iLength)
{
	return HR_OK;
}

EnHandleResult UdpSocketImpl::OnClose(IUdpCast * pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
{
	return HR_OK;
}

EnHandleResult UdpSocketImpl::OnConnect(IUdpCast * pSender, CONNID dwConnID)
{
	cout << "OnConnect: " << endl;

	return HR_OK;
}

commented

Project->Properties->C/C++->Preprocessor->Preprocessor Definitions
添加 HPSOCKET_STATIC_LIB

@oskey 我看官方udpcast demo中也没有依赖呢

@Endt4sk 这个添加了也没有效果呢。
我是按照的是第一种方式引入的呢。

image