Domanda

Sto usando una libreria di codice da un tutorial per la fornitura di funzionalità per il passaggio di punti funzione delle funzioni membro non statiche a una funzione che prevede un puntatore a funzione statica, probabilmente aiuta a sapere quello che sto per vie legali, ecco il link http://www.codeproject.com/KB/cpp/thunk32.aspx Questo codice utilizza la libreria Boost, che ho scaricato e set-up più o meno tutto, dai.

Nella biblioteca Thunk, uno dei file di intestazione ha una sezione che legge

#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,THUNK32_MAX_ARGS,"Thunk32_template.h"))
??=include BOOST_PP_ITERATE()
#undef BOOST_PP_ITERATION_PARAMS_1

, ma questo mi dà quantità epiche di errori, che posso risolvere cambiando a

#define BOOST_PP_ITERATION_PARAMS_1 (3,(0,THUNK32_MAX_ARGS,"Thunk32_template.h"))
#include BOOST_PP_ITERATE()
#undef BOOST_PP_ITERATION_PARAMS_1

Il codice che viene scaricato è incluso nella mia soluzione come un secondo progetto, che è in grado di compilare e costruire felicemente. Ma il mio progetto che utilizza questo codice ha problemi di collegamento, per salvare la gente che chiede, ottengo questi messaggi di errore

1>WebCamera.obj : error LNK2019: unresolved external symbol "protected: __thiscall indev::Thunk32Base::Thunk32Base(void)" (??0Thunk32Base@indev@@IAE@XZ) referenced in function "public: __thiscall indev::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>(void)" (??0?$Thunk32@VWebCamera@@$$A6AXPAUHWND__@@PAUvideohdr_tag@@@Z@indev@@QAE@XZ)
1>WebCamera.obj : error LNK2019: unresolved external symbol "protected: __thiscall indev::Thunk32Base::~Thunk32Base(void)" (??1Thunk32Base@indev@@IAE@XZ) referenced in function "public: __thiscall indev::Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>::~Thunk32<class WebCamera,void __cdecl(struct HWND__ *,struct videohdr_tag *)>(void)" (??1?$Thunk32@VWebCamera@@$$A6AXPAUHWND__@@PAUvideohdr_tag@@@Z@indev@@QAE@XZ)
1>WebCamera.obj : error LNK2019: unresolved external symbol _capCreateCaptureWindowA@32 referenced in function "public: bool __thiscall WebCamera::Init(struct HWND__ *)" (?Init@WebCamera@@QAE_NPAUHWND__@@@Z)

Credo che questo sta cercando di dire che il costruttore e distruttore non sono dichiarati e che il mio WebCamera.Init () è incasinato pure. Ho fatto in modo che la libreria che le esportazioni del progetto Thunk32 è incluso nel mio altro progetto, ma ancora ottengo questi errori.

Vorrei sapere se ho fatto l'ipotesi corretta che ??=include avrebbe dovuto essere cambiato in #include e se ho, che cosa ho torto fatto o omesso di fare che i risultati in questi errori di linker. Oppure, se è possibile fornire me con un modo diverso di essere in grado di passare un puntatore a funzione a una funzione membro non statica, che sarebbe terribile.

Grazie

È stato utile?

Soluzione 4

Ok, così sono riuscito a risolvere questo momento.

Michael Burr nicley detto che ??= è fondamentalmente lo stesso di battitura #, ma in un modo che la gente che non hanno il simbolo cancelletto può digitare, vedere di sequenze trigraph in C ++?

Hans Passant poi preso la palla a rotazione per me Comprami far sapere che non avevo pienamente collegato in roba . Avevo bisogno di fare clic destro sul mio progetto principale, selezionare 'Dipendenze progetto' e selezionare il mio altro progetto che ha il codice thunk32. Ho anche bisogno di dire al mio progetto principale di guardare dove il progetto Thunk sta salvando la lib, che si è rivelata in una cartella in Documenti (spiegare che uno!). Ho anche bisogno di aggiungere il Thunk32d.lib (si noti la 'd' perché ero / sono in modalità debug. Hans ha detto che avevo bisogno di winmm.lib ma si è rivelato (quando googling la funzione che mi stava dando l'errore che avevo bisogno Vfw32.lib invece .

Grazie ragazzi! Spero che dando la risposta completa come questo può aiutare un po 'altro che ha un problema simile.

Altri suggerimenti

??= è una sequenza "trigraph" per il personaggio #. secondo lo standard, trigrammi dovrebbero essere trattati come uno dei primi passi nella lavorazione (nella fase 1 - prima che le direttive del preprocessore maniglie), così:

??=include "whatever"

Dovrebbe essere equivalente a:

#include "whatever"

così si dovrebbe essere in grado di usare quella forma (mi chiedo perché il trigraph è stato messo lì, in primo luogo -? Una specie di male scherzo forse)

Tuttavia, trigrammi causare problemi e la confusione (probabilmente più di quanto non aiuto), in modo da compilatori sembrano muoversi verso di avvertimento su di loro e / o inadempiente di non gestire loro. Il compilatore in VS 2010 ha elaborazione trigraph disattivato di default - è necessario utilizzare l'opzione /Zc:trigraphs per accenderlo

.

di sequenze trigraph in C ++? per ulteriori dettagli.

Ah, Einar, buon uomo. Facendo flash e Sharepoint roba in questi giorni, ouch. Norvegese, potrebbe spiegare i trigrammi.

Anyhoo, nulla di complicato, basta dimenticato di dire al linker di guardare alcune librerie. Fare clic con il progetto, Dipendenze progetto, selezionare il progetto Thunk. Ciò fa in modo che Thunk32.lib viene guardato e risolve il ctor e dtor.

Fai clic destro di nuovo, Proprietà, Linker, dipendenze aggiuntive, aggiungere "Winmm.lib". Che risolve il simbolo capCreateCaptureWindow.

Hai un costruttore e un distruttore dichiarato nella Indev :: classe Thunk32Base che ti sei dimenticato di definire nel suo file cpp?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top