2012-02-15 108 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