Существует способ сделать это серверная сторона с итератором, который не сохраняет одновременную копию всех записей:
import itertools
return render_to_response('template.html',
{
"flattened_entries": itertools.chain(*(blog.entries for blog in blogs)),
})
Во-первых, вам не нужно импортировать или экспортировать typedef. Пока они находятся в файлах заголовков, которые используют обе стороны, все в порядке. Вам действительно необходимо импортировать / экспортировать функции и определения классов.
Предположительно, вы используете одни и те же файлы заголовков как для импорта, так и для экспорта кода, так что вы могли бы сделать некоторую магию makefile, чтобы определить макрос препроцессора на каждой стороне, а затем сделать что-то вроде это:
#if defined( LIBRARY_CODE )
#define MYAPI __declspec(dllexport)
#else
#define MYAPI __declspec(dllimport)
#endif
extern MYAPI void func1();
class MYAPI MyClass {
...
};
Что касается функций C по сравнению с C ++, вы можете сделать следующее:
#if defined( __cplusplus__ ) // always defined by C++ compilers, never by C
#define _croutine "C"
#else
#define _croutine
#endif
extern _croutine void function_with_c_linkage();
Убедитесь, что вы импортируете этот файл заголовка из исходного файла C ++ (содержащего реализацию этой функции), иначе компилятор не узнает, как его передать Соединение C.
Взгляните на различные библиотеки OpenSource. Там вы найдете множество примеров того, как сделать хороший заголовок библиотеки. В случае C ++ без внешнего символа "C" могут возникнуть проблемы с оформлением имени.