JS - ctypes 를 이용 하여 Thunderbird 확장 개발
MDN 에서 js - ctypes 에 대한 설명:
js-ctypes allows application and extension code to call back and forth to native code written in C. C++ support is limited, see bug 505907 for full support. Unlike binary XPCOM components, It allows developers to ship a single binary for use with multiple versions of Firefox.
주의 두 가지: 1. js - ctypes 는 C libraries 와 만 상호작용 을 하고 C + libraries 와 상호작용 을 할 수 없습니다. C + libraries 와 상호작용 이 필요 하 다 면 중간 C libraries 를 만 들 수 있 습 니 다.
2. 이것 은 중요 한 점 입 니 다. 이것 은 XPCOM 의 버 전 호환성 문 제 를 해결 할 수 있 습 니 다.
js - ctypes 를 사용 하려 면 ctypes. jsm 모듈 을 가 져 와 야 합 니 다:
Components.utils.import("resource://gre/modules/ctypes.jsm")
ctypes 대상 은 방법 과 데이터 형식 을 제공 합 니 다.
CType ArrayType(type[,length]);
Returns a new
CType
representing an array data type. CData cast(data, type);
Casts the specified
CData
object to a new type, returning a new CData
object representing the value in the new type. CType FunctionType(abi, returnType[, argType1, ...]);
Returns a new
CType
object describing a C function. CData Int64(n);
String libraryName(name);
Returns the correct platform-specific filename for a given library name
Library open(libSpec);
Opens a library, specified by a pathname
CType PointerType(typeSpec);
Returns a
CType
object describing a new pointer data type. CType StructType(name[, fields]);
Returns a
CType
object describing a new structure data type. CData UInt64(n);
ctypes. open 을 사용 하여 로 컬 DLL 을 불 러 옵 니 다. LoadLibrary (), windows 환경 에서:
var lib = ctypes.open("user32.dll");
MAC OS X 에서:
var coreFoundation = ctypes.open("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation");
사용 을 중단 할 때 close () 를 사용 합 니 다. 실패 하면 쓰레기 회수 체 제 는 라 이브 러 리 에 대한 인용 을 자동 으로 닫 습 니 다.
lib.close();
dll 내 보 내기 함 수 는 Library 대상 의 declare () 방법 으로 설명 해 야 합 니 다. 설명 이 되면 함 수 는 표준 문법 으로 함수 호출 을 할 수 있 습 니 다.예 를 들 어 DLL 을 만 들 고 함수 long Add (long a, long b) 를 내 보 냅 니 다.
js - ctypes 에서 우 리 는 그것 에 대해 성명 을 해 야 한다.
var add = lib.declare("Add",
ctypes.default_abi,
ctypes.long,
ctypes.long,
ctypes.long);
첫 번 째 매개 변 수 는 함수 명 이 고 두 번 째 매개 변 수 는 세 가지 선택 이 있 습 니 다.
default_abi
Corresponds to
cdecl
; standard libraries use this ABI. You also use this for all system calls on Mac OS X and Linux. stdcall_abi
Used for calling functions declared with
stdcall
on Windows. These functions' names are automatically mangled for you by js-ctypes. winapi_abi
Used for calling Windows system functions. These are declared as stdcall on Windows, but do not have mangled names like those used by
stdcall_abi
above. 뒤의 매개 변 수 는 함수 의 반환 매개 변수 와 입력 매개 변수 입 니 다. 어떻게 되 돌아 가 는 지 void 또는 입력 은 void 입 니 다. 성명 에 표시 하지 않 아 도 됩 니 다.
또한 오류 정 보 를 조회 하 는 두 가지 속성 이 있 습 니 다.
errno
Number
The value of the latest system error. Similar to errno in libc, available on all platforms. Cannot be set.
winLastError
Number|undefined
The value of the latest Windows error. Similar to GetLastError under Windows, available only for Windows. Cannot be set.
메모리 관리: JS 코드 세그먼트 에 구조 체 나 배열 구성원 이 생 성 되면 JS 대상 이 차지 하 는 메모리 가 존재 하면 풀 리 지 않 습 니 다.아래 의 js - ctypes 대상 은 대상 인용 을 가지 고 대상 이 존재 합 니 다.
1. declare () 로 설명 하 는 함수 나 정적 데이터 로 library 대상 이 존재 합 니 다.
2. CType 변 수 는 CType 대상 을 지속 적 으로 존재 합 니 다.
3. 특정한 상황 에서 CData 변 수 는 CData 대상 을 지속 적 으로 존재 하 게 합 니 다.예 를 들 어 방위 구조 체 구성원 이나 배열 구성원 을 통 해 발생 하 는 CData 대상 은 CData 대상 을 지속 적 으로 존재 하 게 할 수 있다.
CData. address () 나 addressOFElement 또는 contents 를 사용 하여 CData 의 내용 을 직접 방문 할 때 CData 대상 이 암시 적 으로 생 성 되 지만 지속 적 으로 존재 하지 않 아 GC 에서 자동 으로 회수 할 수 있 습 니 다.이 를 사용 하기 전에 가리 키 는 대상 이 GC 에서 회수 되 지 않도록 명시 적 으로 인용 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.