Я пытаюсь использовать ONCRCP-Windows port из приложения C++, но у меня есть функция ссылки на проблемы в библиотеке. В библиотеке есть C-файл, который содержит следующее определение функции C:VisualC++, ссылающийся на C-функции из C++
//xdr_stdi.c
….
void
xdrstdio_create(xdrs, file, op)
register XDR *xdrs;
FILE *file;
enum xdr_op op;
{
xdrs->x_op = op;
xdrs->x_ops = &xdrstdio_ops;
xdrs->x_private = (caddr_t)file;
xdrs->x_handy = 0;
xdrs->x_base = 0;
}
Декларация той же функции присутствует в файле заголовка, как следующие:
// xdr.h
DllExport void xdrstdio_create(); /* XDR using stdio library */
Если я называю это функция от main.c
файла это работает правильно, но если я называю это из main.cpp
он жалуется, говоря:
“error C2660: 'xdrstdio_create': function does not take 3 arguments”
Это действительно имеет смысл для меня, и я искренне удивлен тем, что в C это не жалуется ... Я, однако, пытался включить заголовочный файл, обертывающий #include
в extern C{ #include... }
, но это не помогло. Как ни странно заменить определение в заголовке на
DllExport void xdrstdio_create(XDR *xdrs, FILE *file, enum xdr_op op);
Делает библиотека не компилировать с ошибкой ошибки
C2143: syntax error: missing ')' before '*'
я не тратил времени отслеживать этот второй вопрос вниз ... я предпочел бы понять, почему первый случай отлично работает в C, но не в C++
Спасибо большое ... приятное объяснение ... Я не использую windows, и я не нашел ни одного нового порта ONC-RCP ... на самом деле, когда я проверяю файл в текущем дистрибутиве Linux, они передают все параметры ... Я просто понятия не имел, что по-старому они могли бы быть избегать .. . Спасибо за объяснение! – Stefano