我需要使用 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);
}
但是这个方法不行! 我认为有问题,并从 Adobe 站点下载了 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/