c - 在 JSFL 中调用 dll 的问题

标签 c flash dll jsfl

我需要使用 C 创建 dll。但我发现了一些问题。好的,首先:我需要 dll 库中的函数来计算线的角度 - tgA = dy/dx。角度 = arctg(dy/dx)。我在文件 framework.c 中定义了它:

JSBool computeAngle(JSContext *cx, 
                    JSObject *obj, 
                    unsigned int argc, 
                    jsval *argv, 
                    jsval *rval ) {
double dx, dy, angle;
if (argc != 2) {
    return JS_FALSE;
}
if (JS_ValueToDouble(cx, argv[0], &dy) == JS_FALSE ||
        JS_ValueToDouble(cx, argv[1], &dx) == JS_FALSE) {
    return JS_FALSE;
}
if( dx == 0 ) {
    if( dy < 0 ) angle = -90;
    else if( dy > 0 ) angle = 90;
    else angle = 0;
}else angle = atan(dy/dx)*180/M_PI;
return JS_DoubleToValue(cx, angle, rval);
}

但是这个方法不行! 我认为有问题,并从 Adob​​e 站点下载了 Sample.zip。我在我的函数上更改了函数 computeSum,但它仍然不起作用。我认为 JS_ValueToDouble() 和 JS_DoubleToValue 方法有问题。你怎么看?

最佳答案

此方法的哪一部分不起作用?从另一组代码调用 dll 中的方法(例如,您已经编译了 DLL 并创建了一个测试程序,但它抛出了链接器错误),或者您无法编译您的 dll? 如果是第一个,您的方法需要定义如下宏:

#ifdef EXPORT
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

在您的 header 中(或者如果该函数未在 header 中声明,则在 C 文件中),您需要

DLL_EXPORT JSBool computeAngle(JSContext *cx, 
                               JSObject *obj, 
                               unsigned int argc, 
                               jsval *argv, 
                               jsval *rval )

如果在尝试编译您的 dll 时出现错误,则很有可能您没有正确链接到 dll - 您需要设置项目链接器属性(如果使用 MSVS)或使用 -l 选项(如果使用 MinGW)。

关于c - 在 JSFL 中调用 dll 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305950/

相关文章:

二维数组的C编程地址

c# - native dll 的 .net 包装器 - 如何将运行时错误的风险降至最低?

c# - 在 .net4 中尝试 Dll rebase 似乎不起作用

c - MPI程序运行正常,但有时会抛出Segfault11,有时会抛出aborttrap6

c - 在C中,有没有办法获取名称与字符串匹配的多个文件的大小?

c - 递归 C 宏未展开

actionscript-3 - Actionscript 三个较旧的目标不起作用?

javascript - Chrome 中的外部接口(interface)

actionscript-3 - 如何让应用程序在启动时自动扩展?

azure - 非托管 win32 dll 未加载到 IIS 8.5、Win Server 2012 R2、Azure 虚拟机上的 .net MVC 应用程序中