我想编写一个工具来捕获和可视化特定应用程序中的按键,因此我搜索了一个示例源。

我的结果是这样的:

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函数。

现在,当我尝试编译项目时,出现以下错误:

****内部生成器用于构建****
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:警告:忽略#pragma data_seg [-Wunknown-pragmas]
.. \ keydll3.cpp:34:0:警告:忽略#pragma data_seg [-Wunknown-pragmas]
.. \ keydll3.cpp:36:0:警告:忽略#pragma注释[-Wunknown-pragmas]
g++ -okeydll3 keydll3.o StdAfx.o
c:/ mingw / bin /../ lib / gcc / mingw32 / 4.6.1 /../../../ libmingw32.a(main.o):在函数'main'中:
C:\ MinGW \ msys \ 1.0 \ src \ mingwrt /../ mingw / main.c:73: undefined 对“WinMain @ 16”的引用
collect2:ld返回1退出状态
发生构建错误,构建已停止

似乎编译器会错过winmain语句,因为他认为这是Windows应用程序。但是dll不是。
似乎“共享”选项也无效。

那么,如何告诉编译器我的代码是带有某些Windows API调用的dll?

如果还有另外一个在没有Visual Studio的情况下可以运行的示例,请告诉我。

在此先感谢您的贡献。

黑色

最佳答案

您在错误的位置添加了-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

08-07 06:06