Как насчет этого:
var imageUrl = 'https://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg';
var blob = null;
var xhr = new XMLHttpRequest();
xhr.open('GET', imageUrl, true);
xhr.responseType = 'blob';
xhr.onload = function()
{
blob = xhr.response;
console.log(blob, blob.size);
}
xhr.send();
http://qnimate.com/javascript-create-file-object-from-url/
из-за той же политики происхождения, работают только с тем же происхождением
Я когда-то делал что-то подобное. Основной источник проблем заключался в том, что C ++ более строг к типам, как вы и подозревали. Вам нужно будет добавить приведение типов, в которых void * смешивается с указателями других типов. Подобно выделению памяти:
Foo *foo;
foo = malloc(sizeof(*foo));
Выше приведен типичный код C, но для него потребуется преобразование в C ++:
Foo *foo;
foo = (Foo*)malloc(sizeof(*foo));
В C ++ появились новые зарезервированные слова, такие как "class", "и", "bool", " catch "," delete "," явный "," изменяемый "," namespace "," new "," operator "," or "," private "," protected "," friend "и т. д. Их нельзя использовать в качестве имена переменных, например.
Вышеупомянутые, вероятно, наиболее распространенные проблемы, когда вы компилируете старый код C с помощью компилятора C ++. Полный список несовместимостей см. см. Несовместимость между ISO C и ISO C ++ .
Вы также спрашиваете об изменении имени. В отсутствие внешних оболочек "C" компилятор C ++ будет искажать символы . Это не проблема, если вы используете только компилятор C ++ и не полагаетесь на dlsym () или что-то подобное для извлечения символов из библиотек.
Если я не заверну все мои файлы C в "extern C {...}", получу ли я искажение имен там, где я меньше всего этого ожидаю?
Это кусается. вы, когда пытаетесь связать вместе C и C ++.
Я написал много файлов заголовков, содержащих:
#ifdef __cplusplus
extern "C" {
#endif
// rest of file
#ifdef __cplusplus
}
#endif
Через некоторое время он сливается с существующим шаблоном с несколькими включениями, и вы перестаете его видеть. Но вы должны быть осторожны, где вы его помещаете - обычно он принадлежит после , любой включает ваш заголовок.
Есть ли какая-то причина, по которой мне действительно не следует этого делать?
Если вы знаете, конечно, вы не собираетесь комбинировать C и C ++, тогда я знаю, что нет причин для этого. Но с постепенной миграцией, которую вы описываете, это важно для всего, что связано с опубликованным интерфейсом, который необходимо использовать как компонентам C, так и компонентам C ++.
Основная причина, по которой не делать это, заключается в том, что это не позволяет вам перегрузить функции (по крайней мере, в этих заголовках). Возможно, вы захотите сделать это после того, как перенесете весь свой код на C ++ и начнете поддерживать / рефакторинг / расширять его.
Другой пример: неявное преобразование целых чисел в перечисления в C ++ отсутствует, тогда как оно есть в C. Вам понадобится приведение типов, если вы действительно хотите сделать это в C ++.
В C ++ более строгая проверка типов, поэтому вам может потребоваться добавить приведение к каждому вызову malloc / realloc / calloc.
См. Несовместимость между ISO C и ISO C ++ для очень подробного списка всех несовместимостей. Есть много тонких проблем, в том числе некоторые, которые не сразу проявляются в ошибке компилятора. Например, проблема может быть в размере символьных констант:
// In C, prints 4. In C++, prints 1
printf("%d\n", sizeof('A'));