C++/CX и Amazon Product Advertising API

Язык: C++/CX и XAML. Среда: Visual Studio 2013 в Windows 8.1.

Я пытаюсь использовать Amazon Product Advertising API в своем приложении для Магазина Windows. У меня есть учетная запись Associates, поэтому мне разрешено использовать ее, однако у меня возникают проблемы с реализацией файла .wsdl после использования wsutil.exe для создания файлов .c и .h для моего проекта.

В файлах .c и .h есть ошибки, указывающие на идентификаторы, находящиеся внутри WebServices.h.

Поскольку файлы .c и .h имеют общую длину более 13 тысяч строк кода, я опишу шаги, чтобы воспроизвести мою проблему.

– Перейдите на страницу http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl.

-Сохраните файл в папке проекта или на рабочем столе.

-Откройте командную строку VS2013 и перейдите туда, где находится файл.

-Введите «wsutil /wsdl:AWSECommerceService.wsdl». Это создаст файлы .c и .h, которые можно использовать в проекте.

-Добавьте файлы .c и .h в проект приложения Магазина Windows VC++.

поскольку языком среды является C++/CX, а wsutil предоставил нам файл .c, нам нужно указать компилятору обрабатывать этот файл как файл C++, в противном случае, если вы попытаетесь собрать как есть, он выдаст ошибку:

Ошибка командной строки D8048: не удается скомпилировать файл C '....\New folder\AWSECommerceService.wsdl.c' с параметром /ZW

Моей первой попыткой исправить это было удаление параметра /ZW. Это можно сделать, щелкнув правой кнопкой мыши файл .c, щелкнув свойства, в разделе «Общие» вы увидите «да (/ ZW)», которое вы можете изменить на «нет».

после этого и попытки его построить выдает эту ошибку:

...\awsecommerceservice.wsdl.c : фатальная ошибка C1853: предварительно скомпилированный заголовочный файл Debug\SimpleShop.pch взят из предыдущей версии компилятора или предварительно скомпилированный заголовок C++, и вы используете его из C (или наоборот )

Это было неправильное исправление, поэтому я вернулся и добавил параметр /ZW.

Затем я решил указать компилятору обрабатывать файл .c как файл .cpp, добавив параметр /TP. Вы можете найти это, щелкнув правой кнопкой мыши файл .c, щелкнув свойства, нажмите «Дополнительно», щелкните раскрывающийся список рядом с «Скомпилировать как» и выберите /TP.

Теперь при попытке сборки проекта в файлах .c и .h появляются ошибки для идентификаторов, которые находятся в файле WebServices.h.

Вот где я застрял. Я попытался #include "WebServices.h" в файл .h (который, как ни странно, отсутствует, а файл .c - нет), и это никак не устраняет какие-либо ошибки.

Я ничего не могу найти об использовании Amazon Product Advertising API в приложении магазина Windows в Интернете, поэтому все попытки исправления были получены с форумов Win7 или WCF. Шаги, которые я пытаюсь выполнить, взяты из Amazon, их можно найти здесь (сосредоточьтесь на шаге 4):

http://docs.aws.amazon.com/AWSECommerceService/latest/GSG/GettingSetUp.html

Здесь происходит несколько вещей:


person user3164339    schedule 30.04.2014    source источник


Ответы (1)


Вам необходимо включить заголовок pch.h в начало сгенерированного файла .c.

  1. Это звучит как настоящая ошибка в сгенерированном заголовке. Обратите внимание на элемент, определенный дважды.

  2. структура typedef _RelatedItems

    } _Похожие материалы;

    {

    enum _Relationship Relationship;
    WCHAR* RelationshipType;
    unsigned __int64 RelatedItemCount;
    unsigned __int64 RelatedItemPageCount;
    unsigned __int64 RelatedItemPage;
    unsigned int RelatedItemCount;
    _Field_size_(RelatedItemCount)struct _RelatedItem* RelatedItem;
    

    Другие ошибки связаны с тем, что отсутствующие идентификаторы фактически недоступны для приложений Магазина Windows. И WS_SERVICE_SECURITY_CALLBACK, и WS_CONTRACT_DESCRIPTION условно определены в заголовке SDK WebServices.h только для настольных приложений.

  3. "если WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)"

    Основная проблема заключается в том, что файлы .c и .h ссылаются на API и типы, недоступные для приложений Магазина Windows.

person Raman Sharma    schedule 30.04.2014
comment
Поэтому я добавил включение для pch.h, это ничего не исправило, но мне это было нужно. Что касается вашего второго пункта, что бы исправить? Удалить один или переименовать? Если я переименую один из них, не сломается ли он, если Amazon ответит объектом _RelatedItems? Ваш третий пункт звучит так, как будто я вообще не могу использовать Amazon API, и в этом случае попытка исправить пункт 2 не имеет значения. Знаете ли вы решение для вашего третьего пункта? Единственное решение для всего этого, о котором я могу думать, - это создать веб-сайт, использующий этот API, и заставить мое приложение загружать сайт, которого я пытался избежать. - person Raman Sharma; 01.05.2014
comment
извините, я нажал Enter вместо Shift+Enter до того, как мой комментарий был сделан. Но, судя по вашему ответу, я предполагаю, что способ веб-сайта будет единственным способом получить API рекламы продуктов Amazon внутри моего приложения, что заставляет меня задаться вопросом, почему Amazon не создает API для более новых технологий (например, приложений для магазина Windows). - person user3164339; 01.05.2014
comment
да, вы можете использовать любой API на основе REST из приложений Магазина Windows. для мыла API, я думаю, вам придется с вашим предложением - person user3164339; 01.05.2014
comment
вот ошибки: 1> c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1037): ошибка C2371: '_RelatedItems::RelatedItemCount': переопределение; различные базовые типы 1> c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1034): см. объявление '_RelatedItems::RelatedItemCount' 1>c:\users\scott\desktop\new folder\awsecommerceservice .wsdl.h(1576): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1604): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK ' 1>c:\users\scott\desktop\новая папка\awsecommerceservice.wsdl.h(1632): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\новая папка\awsecommerceservice. wsdl.h(1660): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1688): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\новая папка\awsecommerceservice.wsdl.h(1716): ошибка C2061: синтаксическая ошибка: идентификатор «WS_SERVICE_SECURITY_CALLBACK» 1>c: \users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1744): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1772 ): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(1800): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\ пользователи\скотт\рабочий стол\новая папка\awsecommerceservice.wsdl.h(1828): ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\новая папка\awsecommerceservice.wsdl.h(1856) : ошибка C2061: синтаксическая ошибка: идентификатор 'WS_SERVICE_SECURITY_CALLBACK' 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(2709): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором «AWSECommerceServiceBinding» 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.h(2709): ошибка C4430: отсутствует спецификатор типа — предполагается int. Примечание. C++ не поддерживает default-int 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.c(1159): ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором 'contractDesc' 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.c(1159): ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает default-int 1>c:\users\scott\desktop\new folder\awsecommerceservice.wsdl.c(6674): фатальная ошибка C1903: невозможно восстановить предыдущие ошибки; остановка компиляции - person Raman Sharma; 01.05.2014