参考我的第一篇文章: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库。
有什么想法吗?感谢
答案 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 ++就可以了。)