免责声明:C++ Redefinition Header Files (winsock2.h)并未解决我的问题
在这个项目中,我试图截取屏幕截图然后用libjpeg-turbo压缩它。问题是我得到了像
这样的错误"sockaddr": "struct" Type redefinition
和
"nothl": Redefinition
ScreenWorker.h:
#pragma once
#ifndef SCREENWORKER_H
#define SCREENWORKER_H
#include <string>
#include <vector>
#include <thread>
#include <turbojpeg.h>
#include <Windows.h>
#include "..\API\NetClient.h"
class ScreenWorker {
private:
NetClient* client;
public:
int delay = 30;
ScreenWorker(NetClient* client);
HBITMAP GetScreenBmp(HDC hdc);
void Update();
};
#endif
ScreenWorker.cpp:
#include "ScreenWorker.h"
ScreenWorker::ScreenWorker(NetClient* client) {
this->client = client;
Update();
}
HBITMAP ScreenWorker::GetScreenBmp(HDC hdc) {...}
void ScreenWorker::Update() {...}
main.cpp(DLL-Entry):
#pragma once
#include "..\..\Base\API\API\GladOSClient.h"
#include "ScreenWorker.h"
using namespace std;
BOOL WINAPI DllMain(HINSTANCE Instance, DWORD Reason, LPVOID Reserved) {
return true;
}
NetClient.h(仅限标题部分):
#pragma once
#ifndef NETCLIENT_H
#define NETCLIENT_H
#define _WINSOCKAPI_
#include <Windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <vector>
#include <list>
#include <mutex>
#include <map>
#include <string>
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#include "Utils.h"
#include "PacketHandler.h"
#include "Packet.h"
...
#endif
正如您所看到的,我在任何地方都使用了标头防护装置,但是我得到了这些错误。似乎包含&#34; Windows.h&#34;?
存在问题提前致谢!
修改 我猜这个问题与libjpegturbo处理&#34; Windows.h&#34;的包含方式有关。目前我没有办法解决这个问题。也许即时尝试在一个单独的DLL中导出我需要的功能...希望这将解决它。
答案 0 :(得分:0)
经典问题。
只需从NetClient.h
#include <Windows.h>
包含<Winsock2.h
&gt;将为您提供<windows.h>
并更正所有重新定义的问题。