Используя далекие указатели функции

Это уже было предложено в комментариях. Я добавил тип контента (измените его, если хотите, если у вас другой тип контента).

   $data = array(
        'data'  =>  'Testing data',
        'name'  =>  'Testing',
        'no'    =>  '1234');
    $data_string = json_encode($data); 
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL, Yii::$app->request->post('url'));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_SSLVERSION, 6); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . mb_strlen($data_string) )
            ); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
6
задан Petr Abdulin 22 November 2011 в 01:56
поделиться

5 ответов

__ далеко в правильном месте в определении типа?

[Редактирование, в ответ на комментарий ChrisN - спасибо]

Это - зависимая от компилятора функция, так как это не часть ANSI C. Согласно руководству компилятора <http://www.freescale.com/files/soft_dev_tools/doc/ref_manual/CW_Compiler_HC12_RM.pdf>, глава 8, Вам поместили его правильно. В других компиляторах Вы, возможно, должны инвертировать порядок. Это должно быть довольно легко выяснить, тем не менее, так как точно одна из этих двух опций скомпилирует с любым данным компилятором.

Я должен добавить __ далеко к (MYFP) бросок?

Нет, это - часть типа.

Некоторая информация предполагает, что вызов к нечто не должен быть разыменован, каков Ваш опыт?

Указатели функции могут быть дополнительно разыменованы в C. Следующие строки оба допустимы, делают ту же самую вещь:

foo = (MYFP)0xFFFFFA;
returnvalue = foo(39);  // 1
returnvalue = (*foo)(39);  // 2

Что еще об этом выглядит неправильным, или я мог бы попытаться выполнить это?

Вы сделали это точно правильно.

8
ответ дан 8 December 2019 в 12:23
поделиться

__far ключевое слово, по крайней мере, в мире MS, использовалось при создании двоичных файлов, которые использовали сегментированную память. Необходимо понять 8 086 систем памяти для понимания этого. Эти 8086 разделили память на сегменты, каждый сегмент был 64K долго, таким образом, каждому адресу в сегменте были нужны 16 битов. Адреса прибыли в две формы: рядом и далеко. Близкий адрес составлял 16 битов и был смещением в текущий сегмент, один из CS, DS, ES, SS в зависимости от инструкции, далекое составляло 32 бита и состояло из сегмента и смещения. В этих 8086 абсолютный адрес равнялся 16 * сегмент + смещение, давая адресуемый диапазон 1 МБ.

Если Вы не используете сегментированную систему памяти, и похоже, что Вы не, то все адреса имеют то же число битов, таким образом, близкое/далекое различие не необходимо, что означает, что ключевое слово, вероятно, проигнорировано компилятором.

10
ответ дан 8 December 2019 в 12:23
поделиться

Это - отрывок кода, который работает из проекта, я продолжаю работать. Это - Парадигма C++, таким образом, это использует некоторую версию Borland. ЦП, который это использует, является 8 086 клонами, таким образом, сегментировал 20-разрядную память.

void softSerial0SR(unsigned16);
void (__far *softHandler)(unsigned16);

Я инициализирую softHandler к 0 без жалобы.

Затем

softHandler = softSerial0SR;

в коде установки.

Для вызова его просто назовите softHandler как регулярная функция.

Обратите внимание, что этот код немного настраивают для Вас из фактического кода, который я имею.

1
ответ дан 8 December 2019 в 12:23
поделиться

Согласитесь, что код выглядит хорошо - в этом случае, я получил бы дизассемблирование кода, сгенерированного, и фигура, если бы это вышло право. Должно только быть 10 инструкций самое большее - и затем Вы будете знать наверняка, если это работало.

0
ответ дан 8 December 2019 в 12:23
поделиться

обе программы были созданы тем же компилятором/опциями, таким образом, они используют тот же OBI?

0
ответ дан 8 December 2019 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: