我试图将Neko dll(用C++编写)与Haxe的C++目标一起使用。我可以调用haxe中的函数,但不能传递值。

这是C++代码-

value Hello(value h)
{
    cout << val_int(h);
    return val_int(1);
}DEFINE_PRIM(Hello, 1);

这是Haxe码-
class Main
{
     var load = cpp.Lib.loadLazy( "ndll" , "Hello", 1 );
     static function main()
     {
          load(1);
     }
 }

仅当函数不带参数时才执行。同样,从C++函数返回给Haxe的值是null

当我为neko目标编译时,此代码实际上可以完美地工作,但似乎不适用于cpp目标。

任何帮助表示赞赏。

最佳答案

为了使它起作用,您必须将其添加到cpp文件的标题中:

#define IMPLEMENT_API
#include <hx/CFFI.h>

(而不是neko的标题)
如果要让ndll在neko和hxcpp上运行,则还应添加
#define NEKO_COMPATIBLE

在hx / CFFI.h包含之前。

您可以使用最适合自己的方式进行编译,但是我建议使用Build.xml生成ndll,因为它会自动为hxcpp的 header 正确添加include和lib路径。您可以在此处看到一个非常简单的Build.xml的示例:
http://pastebin.com/X9rFraYp

您可以在此处查看有关hxcpp的CFFI的更多文档:http://haxe.org/doc/cpp/ffi

07-24 21:18