相关疑难解决方法(0)

如何在 Windows 上编译共享库,以便它可以与 raku 中的 NativeCall 一起使用?

我正在尝试在 Windows 上编译一个可以与Raku 中的NativeCall一起使用的 DLL 库。这是一个最小的 C 代码 ( my_c_dll.c):

#include <stdio.h>
#define EXPORTED __declspec(dllexport)
extern __declspec(dllexport) void foo();

void foo()
{
  printf("Hello from C\n");
}
Run Code Online (Sandbox Code Playgroud)

我在 Windows 10 上安装了 Visual Studio 2019 的构建工具。要编译 DLL,我打开“VS 2019 的开发人员命令提示符”并运行:

> cl.exe /c my_c_dll.c
> link /DLL /OUT:my_c_dll.dll my_c_dll.obj
Run Code Online (Sandbox Code Playgroud)

这将创建一个 DLL my_c_dll.dll,然后我尝试从 Raku ( test-dll.raku)使用它:

use v6.d;
use NativeCall;
sub foo() is native("./my_c_dll.dll"){ * }
foo();
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时(我已经安装了 Rakudo 版本 2020.05.1),我得到:

> raku test-dll.raku
Cannot locate native …
Run Code Online (Sandbox Code Playgroud)

windows dll raku

7
推荐指数
1
解决办法
85
查看次数

如何从本机调用返回 Hash/Raku 对象?

我正在编写一个使用 的库NativeCall,如果能够Hash从导出函数返回 Raku 对我来说会非常方便。我怎样才能做到这一点?

例如,在 Ruby 中,如果我想Hash从 C 返回 a,我会这样做:

#include "ruby.h"

VALUE make_hash() {
    VALUE hash = rb_hash_new();
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

我有兴趣看看这是否可以完成,我在想也许我需要使用 MoarVM 标头或其他东西。但我不确定。

我想做的是编写一个 C 函数,它接受一个 String 来做一些事情,然后返回一个 Raku 哈希。

moarvm raku

6
推荐指数
2
解决办法
225
查看次数

标签 统计

raku ×2

dll ×1

moarvm ×1

windows ×1