2010-02-21 63 views
2

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

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方法有问题。你怎么想?

回答

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的。