[plt-scheme] foreign and C macros
Eli Barzilay <eli at barzilay.org> writes:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> On Mar 28, David Van Horn wrote:
>>
>> I was recently trying to rewrite my MySQL library to use foreign.ss
>> instead of cffi.ss. Unfortunately the MySQL C API uses macros in
>> place of procedures for many of the library's functionalities.
>>
>> Eg: #define mysql_num_rows(res) (res)->row_count
>> [...]
>> So is there a graceful solution to this problem using foreign.ss?
>
> Well, not really. In the long run, it might be feasible to write a C
> header parser (Joe has something that's already working, but more work
> is required to actually use it), but for now there is no simple
> solution.
Ultimately, it cannot be done. C macros simply don't have enough
information to be used other than in the context of a surrounding C
program. Things like this:
#define offsetofclass(base, derived) ((DWORD_PTR)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)
#define TRY { try {
#define END_TRY } catch (CException* e) \
{ ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); e->Delete(); } }
#define EXTENSION_SNAPIN_DATACLASS(dataClass) dataClass m_##dataClass;
#define _SW( psz ) ATL::CStaticString< wchar_t, sizeof( L##psz ) >( L##psz )