在JSFL中调用dll的问题

时间:2010-02-21 13:08:05

标签: c flash dll jsfl

我需要使用C创建dll。但是我看到了一些问题。好的,首先:我需要在dll库中使用函数来计算线的角度 - tgA = dy / dx。 Angle = 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);
}

但这种方法不起作用! 我认为有些不对劲,并从Adobe网站下载了Sample.zip。我在我的函数上登记了函数computeSum,但它仍然不起作用。我认为JS_ValueToDouble()和JS_DoubleToValue方法有问题。你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

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

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

在标题中(或者如果函数未在标题中声明,在C文件中),则需要

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

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