Mozilla将C DLL与js ctypes一起使用
我打算构建一个dll,然后将其与Firefox扩展一起使用 我设法在Windows下使用gcc构建了一个DLL:Mozilla将C DLL与js ctypes一起使用,c,firefox,dll,firefox-addon,jsctypes,C,Firefox,Dll,Firefox Addon,Jsctypes,我打算构建一个dll,然后将其与Firefox扩展一起使用 我设法在Windows下使用gcc构建了一个DLL: #包括 整数相加(整数a,整数b) { 返回(a+b); } 我现在尝试通过我的dll使用它。在阅读了一些帖子后,尤其是这篇,我无法做到: 每次尝试ctypes.open时,我都会收到错误消息:无法加载库。但是,DLL路径是正确的。以下是JS代码: Components.utils.import(“resource://gre/modules/ctypes.jsm"); Addon
#包括
整数相加(整数a,整数b)
{
返回(a+b);
}
我现在尝试通过我的dll使用它。在阅读了一些帖子后,尤其是这篇,我无法做到:
每次尝试ctypes.open时,我都会收到错误消息:无法加载库。但是,DLL路径是正确的。以下是JS代码:
Components.utils.import(“resource://gre/modules/ctypes.jsm");
AddonManager.getAddonByID(“greenfox@octo.com,函数(加载项)
{
var libcPath=addon.getResourceURI(“components/library.dll”);
if(libcPath instanceof Components.interfaces.nsURI)
{
var libc=ctypes.open(libcPath.path);
var libc=ctypes.open(libc);
/*导入函数*/
var puts=libc.declare(“add”,/*函数名*/
ctypes.default_abi,/*调用abi*/
ctypes.int32\u t,/*返回类型*/
ctypes.int32\u t,/*参数类型*/
ctypes.int32\u t/*参数类型*/
);
var ret=看跌期权(1,2);
警报(“1+2=“+ret”);
}
你知道吗?URI的路径部分不是你想要的-你想要文件路径:
if(libcPath instanceof Components.interfaces.nsIFileURL)
{
var libc=ctypes.open(libcPath.file.path);
URI的路径部分不是您想要的-您想要文件路径:
if(libcPath instanceof Components.interfaces.nsIFileURL)
{
var libc=ctypes.open(libcPath.file.path);
您是否在
install.rdf
中指定了true
?是的,我在包含extesion的文件夹中进行了检查:DLL在那里从libcPath收集的路径是这个:/C:/Users/frinux/AppData/Roaming/Mozilla/Firefox/Profiles/y8d4lq.default/extensions/greenfox@octo.com/components/library.dland我也尝试移动此li读入C:,然后调用ctypes.open(“C:/library.dll”);但是没有成功您是否在install.rdf
中指定了true
?是的,我在包含扩展名的文件夹中进行了检查:DLL在那里从libcPath收集的路径是这个:/C:/Users/frinux/AppData/Roaming/Mozilla/Firefox/Profiles/y8d44lq.default/extensions/greenfox@octo.com/components/library.dland我也尝试了mov将此库转换为C:,然后调用ctypes.open(“C:/library.dll”);但没有成功是的,我先尝试了(我先看了你的stackoverflow帖子)。路径是好的,但仍然有此错误。我想知道我的DLL是否正常?它已编译,但是否有任何方式无法使用?我如何测试我的DLL?我发布了一个新问题,因为问题似乎不是来自JS,而是来自DLL:是的,我先尝试了(我首先遵循了你的stackoverflow帖子)。路径是好的,但仍然有此错误。我想知道我的DLL是否正常?它已编译,但是否有任何方式无法使用?如何测试我的DLL?我发布了一个新问题,因为问题似乎不是来自JS,而是来自DLL: