Проблема с DLL вызвана в JSFL - PullRequest
       12

Проблема с DLL вызвана в JSFL

2 голосов
/ 21 февраля 2010

Мне нужно создать DLL с помощью C. Но я видел некоторые проблемы. Хорошо, сначала: мне нужна функция в библиотеке 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);
}

Но этот метод не работает! Я подумал, что что-то не так, и скачал Sample.zip с сайта Adobe. Я изменил функцию computeSum в своей функции, но она все еще не работает. Я думаю, что что-то не так с методами JS_ValueToDouble () и JS_DoubleToValue. Как вы думаете?

1 Ответ

0 голосов
/ 09 апреля 2011

Какая часть этого метода не работает? Вызов метода внутри 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.

...