2012-02-19 1 views
1

В ссылке на мой первый пост: Mozilla use a C DLL with js-ctypesпостроить DLL, который будет использоваться Mozilla JS-ctypes

Я пытаюсь построить библиотеку DLL, которая будет использоваться с расширением Mozilla Firefox. Я создал небольшой 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 и может видеть надстройку() метод подвергаются.

Проблема заключается в том, когда я пытаюсь использовать его из моего расширения, я всегда получаю сообщение: Ошибка: Невозможно открыть библиотеку

Вот мой Javascript вызов:

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

Кажется, DLL не открывается Firefox, но мне интересно, почему. Я ничего не вижу о создании DLL для расширения Firefox, похоже, мы можем использовать каждую классическую библиотеку DLL.

Любая идея? Спасибо

ответ

1

Если вы скомпилируете такую ​​библиотеку, вы получаете зависимость от msvcrt.dll, которая, вероятно, не может быть разрешена в вашей системе (redistributable package), на моем это отлично работает. Вы можете скомпилировать библиотеку без зависимости от ЭЛТ, вы просто должны определить DllMain себя:

#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,[email protected] 

Вы не можете использовать функции CRT потом - не смог найти способ статически ставить сценарий с GCC на Windows (Visual C++, с другой стороны, это просто отлично).

+0

Это сделало это, спасибо большое, что я никогда не смог бы это сделать без вашей помощи, Владимир, за этот билет, а также за предыдущие другие! – frinux

+0

Чтобы быть более точным, требуется только объявление в файле C. Линия компиляции с -nostdlib будет препятствовать запуску кода для функции kernel32 – frinux

 Смежные вопросы

  • Нет связанных вопросов^_^