2010-02-21 64 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的。