是否可以与使用ruby.h构建的DLL共享ruby对象?

问题描述 投票:0回答:1

我有一个运行ruby代码(RGSS3,精确)的可执行文件,我还设法构建了一个包含ruby.h的DLL,它通过LoadLibraryA导入到exe。

我想问一下是否有可能在exe和dll之间共享对象/内存?如果是,我该怎么做才能让dll访问exe创建的对象,反之亦然?

ruby windows dll exe
1个回答
0
投票

对的,这是可能的。

Ruby对象用C表示VALUE,它基本上是一个指针。但是,从RGSS3调用这些函数有点麻烦:你必须得到对象的内存地址(object.object_id << 1)并将其传递给函数。

看看this存储库,特别是this文件。它声明和导出一个函数,您可以使用从Win32API导入它的RPG Maker。假设您将test.c从该存储库编译为test.dll

# Load RGSS3 dll
LoadLibrary = Win32API.new("kernel32", "LoadLibraryA", "p")
rgss3_dll = LoadLibrary.call("RGSS301.dll")

# Call function from your dll
bitmap = Bitmap.new(32, 32)

BitmapTest = Win32API.new("test.dll", "BitmapTest", "ll")
p BitmapTest.call(rgss3_dll, bitmap.object_id << 1)
© www.soinside.com 2019 - 2024. All rights reserved.