using C linkage for interface functions