Dołączanie bibliotek SDK Windows

Dołączanie bibliotek SDK Windows
CW
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:2
0

Witam
Na wstępie zaznaczę, że z C++ nie miałem do czynienia ładnych paru lat, a i wtedy tylko na poziomie akademickim.
Muszę napisać programik który podpisze mi xml za pomocą certyfikatu. Programik ma działać z wiersza poleceń, z możliwością późniejszego wykorzystania kodu w aplikacji okienkowej.
Po przekopaniu MSDN-a odkryłem że Windows ma bibliotekę, która może mi w tym pomóc (konkretnie cryptxml). Zainstalowałem więc Visual Studio Express 2013 na nowiutkiej maszynce wirtualnej z Windows 7 Sp1.
Kod mojej "Aplikacji":

Kopiuj
#include "stdafx.h"
#include "cryptxml.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

Mój programistyczny wzwód opadł po krótkim spojrzeniu na listę błędów (Wstawiam część dla czytelności):
//Error 1 error C2146: syntax error : missing ';' before identifier 'HCRYPTPROV' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 323 1 ConsoleApplication1
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 323 1 ConsoleApplication1
Error 3 error C2146: syntax error : missing ';' before identifier 'dwVersion' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 841 1 ConsoleApplication1
Error 4 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 841 1 ConsoleApplication1
Error 5 error C2143: syntax error : missing ';' before '' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 843 1 ConsoleApplication1
Error 6 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 843 1 ConsoleApplication1
Error 7 error C2146: syntax error : missing ';' before identifier 'cbOID' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 844 1 ConsoleApplication1
Error 8 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 844 1 ConsoleApplication1
Error 9 error C2143: syntax error : missing ';' before '
' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 850 1 ConsoleApplication1
Error 10 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 850 1 ConsoleApplication1
Error 11 error C2146: syntax error : missing ';' before identifier 'cbInnerString' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 851 1 ConsoleApplication1
Error 12 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 851 1 ConsoleApplication1
Error 13 error C2143: syntax error : missing ';' before '*' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 852 1 ConsoleApplication1
Error 14 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 852 1 ConsoleApplication1
Error 15 error C2146: syntax error : missing ';' before identifier 'cbOuterString' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 853 1 ConsoleApplication1
Error 16 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 853 1 ConsoleApplication1
Error 17 error C2146: syntax error : missing ';' before identifier 'dwUse' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 858 1 ConsoleApplication1
Error 18 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 858 1 ConsoleApplication1
Error 19 error C2146: syntax error : missing ';' before identifier 'cBits' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 860 1 ConsoleApplication1
Error 20 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 860 1 ConsoleApplication1
Error 183 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 1278 1 ConsoleApplication1
Error 184 error C2086: 'int BOOL' : redefinition c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 1278 1 ConsoleApplication1
Error 185 error C2146: syntax error : missing ')' before identifier 'hProv' c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 1280 1 ConsoleApplication1
Error 186 error C1003: error count exceeds 100; stopping compilation c:\program files (x86)\windows kits\8.1\include\um\wincrypt.h 1280 1 ConsoleApplication1
187 IntelliSense: identifier "LONG" is undefined c:\Program Files (x86)\Windows Kits\8.1\Include\shared\bcrypt.h 29 44 ConsoleApplication1
286 IntelliSense: identifier "PUCHAR" is undefined c:\Program Files (x86)\Windows Kits\8.1\Include\shared\bcrypt.h 958 34 ConsoleApplication1//

Więc teraz dochodzę do wniosku, że zrobiłem coś źle przy imporcie bibliotek, i wyobrażam sobie, że rozwiązanie jest trywialne. Czy ktoś z programistów C++ kto ma doczynienia z Windows SDK może udzielić jakiejś pomocy?

CW
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:2
0

OK, znalazłem odpowiedź na swoje pytanie. wystarczyło dodać bibliotekę windows.h - najwyraźniej są w niej typy i makra potrzebne do korzystania z innych bibliotek SDK.
ostatecznie tak to powinno wyglądać:

Kopiuj
#include "stdafx.h"
#include "windows.h"
#include "cryptxml.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}
 

No i dalej już z górki :)
Temat do zamknięcia. Nie usuwam bo może ktoś kiedyś też będzie miał z tym problem.

Zobacz pozostałe 2 komentarze
Azarien
@ChuWDu: jest N sposobów ;-)
CW
@Azarien Problem polega na tym że: Jeśli N jest liczbą sposobów w jaki należy to zrobić i M jest liczbą sposobów w jaki nie należy tego robić to: N -> 1, M -> ∞ im N bliższe 1 tym lepiej, jak na razie poruszam się w zbiorze M :P
Azarien
N ≠ 1 bo masz do wyboru: a) "normalnie", b) tak jak to robi Microsoft, c) smartpointery i gotowe klasy bazowe, np. ATL/MFC d) pod C++/CLI zapewne dochodzi jakiś dotnetowy sposód.
CW
@Azarien Będę musiał ten dyskurs przełożyć na czas, kiedy będę operował wiedzą umożliwiającą mi nie robienie z siebie błazna :) Z mojego doświadczenia jednak wynika, że optymalne n wynosi 3 (mówię o ogóle problemów programistycznych)
CW
A swoją drogą, dokumentacja do tego jest poje####...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.