构建一个由Mozilla js-ctypes使用的DLL

时间:2012-02-19 11:02:33

标签: dll firefox-addon mozilla jsctypes

参考我的第一篇文章:Mozilla use a C DLL with js-ctypes

我正在尝试构建一个从Mozilla Firefox扩展中使用的DLL。我创建了一个小C代码并用GCC编译它。

这是C代码:

#include<stdio.h>
int add(int a,int b)
{
    return(a+b);
}

以下是编译行:

gcc -c library.c
gcc -shared -o library.dll library.o -Wl

DLL编译得很好,我可以用dllexp打开它,可以看到暴露的add()方法。

问题是,当我尝试从我的扩展程序中使用它时,我总是收到消息:错误:无法打开库

这是我的Javascript电话:

var libc = ctypes.open("C:\\WINDOWS\\system32\\user32.dll"); //OK
var libc2 = ctypes.open("C:\\WINDOWS\\system32\\library.dll"); //KO

Firefox似乎无法打开DLL,但我想知道为什么。我没有看到为Firefox扩展构建DLL的任何内容,似乎我们可以使用每个经典的DLL库。

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:1)

如果您像这样编译库,那么您可能无法在系统上解析msvcrt.dll DllMain(需要redistributable package),我的工作正常。您可以编译您的库而不依赖于CRT,您只需自己定义#include<windows.h> BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { return TRUE; } int add(int a,int b) { return(a+b); }

gcc -shared -nostdlib -o library.dll library.o -Wl,-e_DllMain@12

链接步骤如下:

{{1}}

你不能使用CRT功能 - 我找不到在Windows上用GCC静态编译运行时的方法(另一方面,Visual C ++就可以了。)