Build a DLL to be used by Mozilla js-ctypes

自闭症网瘾萝莉.ら 提交于 2019-11-27 08:32:37

问题


In reference to my first post: Mozilla use a C DLL with js-ctypes

I'm trying to build a DLL to be used from a Mozilla Firefox extension. I created a little C code and compiled it with GCC.

Here is the C code :

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

Here are the compilation lines:

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

The DLL is well compiled, I can open it with dllexp and can see the add() method exposed.

The problem is, when I try to use it from my extension, I always get the message: Error: couldn't open library

Here is my Javascript call:

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

It seems the DLL cannot be opened by Firefox, but I wonder why. I don't see anything about building DLL for Firefox extension, it seems we can use every classic DLL library.

Any idea? Thanks


回答1:


If you compile the library like that you get a dependency on msvcrt.dll which probably cannot be resolved on your system (redistributable package required), on mine it works fine. You can compile your library without the dependency on the CRT, you just have to define DllMain yourself:

#include<windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
  return TRUE;
}

int add(int a,int b)
{
    return(a+b);
}

And the link step looks like this:

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

You cannot use CRT functionality then - I couldn't find a way to compile the runtime statically with GCC on Windows (Visual C++ on the other hand does it just fine).



来源:https://stackoverflow.com/questions/9348604/build-a-dll-to-be-used-by-mozilla-js-ctypes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!