callconv.phpt 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. --TEST--
  2. Different calling conventions
  3. --EXTENSIONS--
  4. ffi
  5. --SKIPIF--
  6. <?php
  7. if (substr(PHP_OS, 0, 3) != 'WIN') die('skip for Windows only');
  8. if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platforms only");
  9. ?>
  10. --FILE--
  11. <?php
  12. $header = <<<HEADER
  13. void __cdecl cdecl_func(int arg1, double arg2, char arg3);
  14. void __stdcall stdcall_func(int arg1, double arg2, char arg3);
  15. void __fastcall fastcall_func(int arg1, double arg2, char arg3);
  16. HEADER;
  17. $headername = __DIR__ . '/callconv.h';
  18. $dllname = __DIR__ . "/callconv_x86.dll";
  19. $ffi1 = FFI::cdef($header, $dllname);
  20. $ffi1->cdecl_func(1, 2.3, 'a');
  21. $ffi1->stdcall_func(4, 5.6, 'b');
  22. $ffi1->fastcall_func(7, 8.9, 'c');
  23. file_put_contents($headername, "#define FFI_LIB \"$dllname\"\n$header");
  24. $ffi2 = FFI::load($headername);
  25. $ffi2->cdecl_func(2, 3.4, 'a');
  26. $ffi2->stdcall_func(5, 6.7, 'b');
  27. $ffi2->fastcall_func(8, 9.1, 'c');
  28. ?>
  29. --EXPECT--
  30. cdecl: 1, 2.300000, a
  31. stdcall: 4, 5.600000, b
  32. fastcall: 7, 8.900000, c
  33. cdecl: 2, 3.400000, a
  34. stdcall: 5, 6.700000, b
  35. fastcall: 8, 9.100000, c
  36. --CLEAN--
  37. <?php
  38. unlink(__DIR__ . '/callconv.h');
  39. ?>