Frage

Ich bin aus einem Tutorial eine Bibliothek von Code für die Funktionalität bereitstellt für das Bestehen Funktionspunkte von nicht-statische Member-Funktionen auf eine Funktion, die eine statische Funktion Zeiger erwartet, hilft wohl weiß, was ich zu verklagen, ist so hier der Link http://www.codeproject.com/KB/cpp/thunk32.aspx Dieser Code verwendet die Boost-Bibliothek, die ich heruntergeladen und Set-up mehr oder weniger alles aus.

In der Thunk Bibliothek, einer der Header-Dateien hat einen Abschnitt, der

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

, aber das gibt mir epische Mengen von Fehlern, die ich durch Ändern es zu

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

Dieser Code, der heruntergeladen wird, ist in meiner Lösung als zweites Projekt enthalten, das in der Lage ist, um glücklich zu kompilieren und zu bauen. Aber mein Projekt, das diesen Code verwendet hat Probleme Verknüpfung zu speichern Leute zu fragen, ich diese Fehlermeldungen

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)

Ich denke, das ist versucht zu sagen, dass der Konstruktor und Destruktor nicht erklärt und dass mein WebCamera.Init () als auch durcheinander. Ich habe darauf geachtet, dass die Bibliothek, dass die Thunk32 Projekt Exporte in meinem anderen Projekt enthalten ist, aber ich habe noch diese Fehler erhalten.

Ich würde gerne wissen, ob ich die richtige Annahme habe, dass ??=include zu #include geändert haben sollte, und wenn ich, was habe ich falsch gemacht oder nicht, dass die Ergebnisse in diesem Linkerfehler zu tun. Oder wenn Sie mich mit einer anderen Art und Weise in der Lage, zur Verfügung stellen können einen Funktionszeiger auf eine nicht-statische Member-Funktion zu übergeben, das wäre genial.

Danke

War es hilfreich?

Lösung 4

Ok, so dass ich es geschafft haben, dies jetzt zu lösen.

Michael Burr nicley sagte, dass ??= im Grunde wie die Eingabe # die gleiche ist, aber in einer Weise, dass Menschen, die nicht haben das Symbol Hash kann es geben, siehe Zweck der Trigraph Sequenzen in C ++?

Hans Passant dann ins Rollen der Kugel für mich mich kaufen lassen, wissen, dass ich nicht voll in Sachen verbunden war . Ich musste einen Rechtsklick auf meinem Hauptprojekt, wählen Sie ‚Projektabhängigkeiten‘ und wählen Sie mein anderes Projekt, das den thunk32 Code. Ich muß auch sehen meinem Hauptprojekt sagen, wo das Thunk Projekt die lib ist das Speichern, die in einem Ordner in meinen Dokumenten entpuppten (erklären, dass man!). Ich musste auch die Thunk32d.lib (man beachte das ‚d‘ hinzufügen, da ich war / bin im Debug-Modus. Hans sagte, dass ich brauchte winmm.lib aber es stellte sich heraus (wenn die Funktion googeln, die mir den Fehler gab, dass ich brauchte Vfw32.lib statt .

Danke Jungs! Ich hoffe, dass durch die vollständige Antwort wie diese gibt es jemanden anders helfen kann, die ein ähnliches Problem hat.

Andere Tipps

??= ist eine "trigraph" Sequenz für den # Charakter. bei der Verarbeitung nach der Norm, trigraphs soll als einer der ersten Schritte behandelt wird (in Phase 1 - vor den Vorprozessor Griffen Richtlinien), so:

??=include "whatever"

Sollte äquivalent sein:

#include "whatever"

so sollten Sie in der Lage sein, dieses Formular zu verwenden (Ich frage mich, warum die trigraph in erster Linie da lag - eine Art bösen Witzes vielleicht)

Allerdings trigraphs Ursache Probleme und Verwirrung (wahrscheinlich mehr, als sie Hilfe), so scheinen Compiler in Richtung Warnung über sie zu bewegen und / oder säumig sie nicht handhaben. Der Compiler in VS 2010 hat trigraph Verarbeitung standardmäßig deaktiviert - Sie können die /Zc:trigraphs Option verwenden, müssen Sie ihn einschalten

.

Siehe Zweck der Trigraph Sequenzen in C ++? für weitere Details.

Ach, Einar, guter Mann. Doing Flash und Sharepoint stopfen in diesen Tagen, autsch. Norwegisch, könnte die trigraphs erklären.

Anyhoo, nichts kompliziert, Sie vergessen haben, nur an einigen Bibliotheken den Linker zu sehen zu erzählen. Rechtsklicken Sie auf Ihr Projekt, Projektabhängigkeiten, kreuzen Sie das Thunk Projekt. Das stellt sicher, dass Thunk32.lib sah bekommt an und löst den Ctor und dtor.

Mit Rechtsklick wieder, Eigenschaften, Linker, zusätzliche Abhängigkeiten, fügen Sie "Winmm.lib". Das löst das capCreateCaptureWindow Symbol.

Haben Sie einen Konstruktor und eine destructor im inDev erklärt :: Thunk32Base Klasse, dass Sie in seiner CPP-Datei zu definieren vergessen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top