首页 > 开发 > JAVA > 正文

JNI监听全局鼠标钩子dll用VS编译显示发现重复定义,如何修改

2017-09-07 09:24:50  来源:网友分享

在做一个程序,鼠标右键按下时记录鼠标坐标,右键释放时停止记录。
按照http://dengpeng.sensorapp.net/?p=495 的方法做了一个钩子,在Code::Blocks下编译通过,但在Eclipse下调用时显示:

(Code::Blocks已在编译属性里勾选上AMD64选项:

);又用VS 2010编译,显示错误:

我对于JNI不太熟悉,请教各位我应该如何修改?为什么CodeBlocks编译通过了而VS显示“发现重复定义”?
提前感谢!

另外:如果想用Java监听全局鼠标事件,还有没有除此之外更简便的方法?

解决方案

1. -march参数不影响目标文件是否为64位(主要影响指令集,比如SSE, 3DNOW支持),-m32-m64 这两个参数才与是否生成32位或64位程序有关。你需要使用64位的MinGW编译器(可以使用这个发行版: http://tdm-gcc.tdragon.net/)。另外,还需要配置一下Code::Blocks使用64位的编译器。

2. MFC DLL不该有DllMain入口(MFC有自己的),请不要在DLL中使用MFC(你提供的例子完全不需要用MFC)。绕过该限制的方法也有,参考: http://support.microsoft.com/kb/14879...