我想使用我开发的专有库(DLL)升级设备。该库可以使用MFC应用程序正常工作。但是,这里的转折是我们必须在浏览器中使其工作。
我的想法是使用applet,然后调用本机DLL来完成这项工作。我的测试Java应用程序一切正常。然后我尝试使用applet,然后没有任何效果。
我已将问题缩小到32位VS 64位JVM。让我解释一下:我正在使用的Eclipse IDE使用 64位JVM ,因为我在 Windows 7 64位。但是,浏览器使用 32位JVM ,但不起作用。
两者之间的差异是传递给我的函数的参数。以下是DLL公开的函数的一些示例:
bool UPGRADELIB_API Connect( const char* serverAddress, unsigned short serverPort );
bool UPGRADELIB_API Upgrade( const char* pFilePath );
分别在Java中匹配:
boolean Icon_ConnectClientNode( String serverAddress, int serverPort );
boolean Icon_Upgrade( String pFilePath );
我的Java测试GUI将IP地址传递给本机lib “192.168.x.x”,端口传递 50005 。在 64bit 中,一切都很好,正如我之前所说的那样。在 32bit 中,如果我在C中打印serverAddress和serverPort,则显示
(空):62384
如您所见,即使端口未正确传递。
我已经待了一个星期了,我从头上拉了很多头发,我不会很快...请帮助我!
答案 0 :(得分:0)
发现错误:传递了一个long并且Java long与32位和64位的C / C ++长度不同。
傻傻的我。