Попытка встроить веб-браузер в проект C32 Win32.Ошибка в MyIOleInPlaceFrameTable - PullRequest
0 голосов
/ 21 октября 2011

Может кто-нибудь мне помочь. Моя цель - поместить дочернее окно веб-браузера в мой проект C ++. Я получил пример кода отсюда:

http://www.codeproject.com/KB/COM/cwebpage.aspx

А потом попытался скомпилировать его с VS 2008. Их пример проекта скомпилирован и работает просто отлично.

Затем, используя ту же VS 2008, я начал вставлять код в свой проект, то есть опять-таки, собственное приложение Win32 GUI, написанное на C ++. Я добавил практически весь код из файла "Simple \ Simple.c" один в один в свой проект C ++, но при попытке его скомпилировать я получаю миллион сообщений об ошибках, начиная с этого:

embed_htm_test.cpp(91) error C2146: syntax error : missing ';' before identifier 'MyIOleInPlaceFrameTable'
embed_htm_test.cpp(91) error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
embed_htm_test.cpp(91) error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

затем около 20 кодов ошибок ниже:

embed_htm_test.cpp(158) : error C2146: syntax error : missing ';' before identifier 'MyIOleClientSiteTable'
embed_htm_test.cpp(158) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
embed_htm_test.cpp(158) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

и т. Д.

Первая ошибка будет в этой строке:

IOleInPlaceFrameVtbl MyIOleInPlaceFrameTable = {Frame_QueryInterface,
Frame_AddRef,
Frame_Release,
Frame_GetWindow,
Frame_ContextSensitiveHelp,
Frame_GetBorder,
Frame_RequestBorderSpace,
Frame_SetBorderSpace,
Frame_SetActiveObject,
Frame_InsertMenus,
Frame_SetMenu,
Frame_RemoveMenus,
Frame_SetStatusText,
Frame_EnableModeless,
Frame_TranslateAccelerator};

и второй в этой строке:

IOleClientSiteVtbl MyIOleClientSiteTable = {Site_QueryInterface,
Site_AddRef,
Site_Release,
Site_SaveObject,
Site_GetMoniker,
Site_GetContainer,
Site_ShowObject,
Site_OnShowWindow,
Site_RequestNewObjectLayout};

Я также включил все включения из оригинального проекта:

#include <windows.h>
#include <exdisp.h>     // Defines of stuff like IWebBrowser2. This is an include file with Visual C 6 and above
#include <mshtml.h>     // Defines of stuff like IHTMLDocument2. This is an include file with Visual C 6 and above
#include <mshtmhst.h>   // Defines of stuff like IDocHostUIHandler. This is an include file with Visual C 6 and above
#include <crtdbg.h>     // for _ASSERT()

И для лучшего из себя, я не могу понять, где IOleInPlaceFrameVtbl и IOleClientSiteVtbl могут быть определены в. Любая идея, ребята?

Ответы [ 2 ]

2 голосов
/ 20 июля 2012

По умолчанию в C ++ он определяет интерфейсы OLE C ++.Чтобы получить интерфейсы в стиле C, перед включением добавьте

#define CINTERFACES
0 голосов
/ 26 августа 2013

Проверьте, имеет ли расширение файла .cpp.Перейдите на .c и перестройте.Для меня это работало нормально.

...