2012-02-15 107 views
3

我想編寫一個工具來捕獲和可視化特定應用程序中的按鍵,所以我搜索了一個示例源。用mingw和eclipse編譯dll

我的結果是這樣的:

http://www.codeguru.com/cpp/w-p/system/keyboard/article.php/c5699

但它還沒有工作。這是我的方法:

我已經使用Mingw 4.6.1作爲工具鏈將源代碼導入爲Elipse(Helios,CDT版本7.0.0.201006141710)中的makefile項目。

在keydll3.cpp我增加了行

#define KEYDLL3_EXPORTS 

告訴我要導出的DLL函數的預處理。

現在,當我嘗試編譯項目,下面的錯誤occour:

 
    **** Internal Builder is used for build    **** 
    g++ -shared -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -oStdAfx.o ..\StdAfx.cpp 
    g++ -shared -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -okeydll3.o ..\keydll3.cpp 
    ..\keydll3.cpp:31:0: warning: ignoring #pragma data_seg [-Wunknown-pragmas] 
    ..\keydll3.cpp:34:0: warning: ignoring #pragma data_seg [-Wunknown-pragmas] 
    ..\keydll3.cpp:36:0: warning: ignoring #pragma comment [-Wunknown-pragmas] 
    g++ -okeydll3 keydll3.o StdAfx.o 
    c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../libmingw32.a(main.o): In function `main': 
    C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `[email protected]' 
    collect2: ld returned 1 exit status 
    Build error occurred, build is stopped 

看來,編譯器錯過了WinMain函數語句,因爲他認爲這是一個Windows應用程序。但一個DLL不是。 這似乎也是「共享」選項沒有效果。

那麼,我該如何告訴編譯器,我的代碼是帶有一些Windows API調用的DLL?

如果還有另一個沒有視覺工作室的例子讓我知道。

在此先感謝您的貢獻。

比諾

回答

3

你已經添加在錯誤的地方-shared選項。它需要被添加到鏈接器標誌,而不是編譯器標誌。你的命令應該像這樣。

g++ -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -oStdAfx.o ..\StdAfx.cpp 
g++ -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -okeydll3.o ..\keydll3.cpp 
g++ -shared -okeydll3 keydll3.o StdAfx.o 
+0

非常感謝! – Noir 2012-02-17 08:43:53