2012-02-19 3 views
1

を使用するDLLをビルドします。Mozilla use a C DLL with js-ctypesは、Mozillaのjs-ctypesのことで私の最初の記事を参照する

私はMozillaのFirefoxの拡張機能から使用するDLLを構築しようとしています。私は少しCコードを作成し、GCCでコンパイルしました。ここ

は、Cコードである:

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

DLLはよくコンパイルされ、Iはdllexpでそれを開くことができ、add()メソッドを見ることができる:ここ

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

コンパイル線であります露出した。

問題は、私は私の拡張機能からそれを使用しようとすると、私は常にメッセージを取得するには、次のとおりです。エラー:オープンできませんでしたライブラリ

ここでは私のJavascriptの呼び出しです:

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

DLLはFirefoxで開くことができないようですが、どうしてですか?私はFirefoxの拡張機能のDLLを構築することについて何も表示されません、我々はすべての古典的なDLLライブラリを使用することができるようだ。

ありがとう

答えて

1

msvcrt.dllに依存するようなライブラリをコンパイルすると、あなたのシステムではおそらく解決できないでしょう(redistributable packageが必要です)。

#include<windows.h> 

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

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

とリンクステップは次のようになります:あなたは、あなただけ DllMainを自分で定義する必要があり、CRTに依存することなく、あなたのライブラリーをコンパイルすることができます

gcc -shared -nostdlib -o library.dll library.o -Wl,[email protected] 

その後、CRTの機能を使用することはできません - I Windows上でGCCを使ってランタイムを静的にコンパイルする方法を見つけることができませんでした(一方でVisual C++はうまくいきます)。

+0

それは、私はあなたの助けなしでそれを行うことはできませんでした多くのおかげで、このチケットのために、以前の他の人にも当てはまりました! – frinux

+0

より正確には、Cファイル内の宣言だけが必要です。 -nostdlibを指定したコンパイル行は、コードがkernel32関数を実行しないようにします – frinux

関連する問題