我的开发团队最近被迫转到我们无法完全访问服务器的远程开发环境.在转换之前,我们有一个JAR在Java 1.7 x64和JRE 7上正常运行.当我们转移到新服务器时,我们的JAR运行正常,但随后其中一个服务器管理员将我们的Java"更新"到更旧版本版本并卸载了我们正在使用的版本.不要问我为什么,我不知道.我重新安装了Java 1.7并将其与JRE一起卸载了1.6.
运行时出现以下问题,没有构建错误:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.
Run Code Online (Sandbox Code Playgroud)
我在我的笔记本电脑上运行相同的JAR没有任何问题.服务器和我的笔记本电脑在相应的%HOME%变量和系统路径中都有JDK 1.7和JRE 7.我甚至重新安装了JRE 6并将其放在系统环境PATH变量中,结果相同.
我也改变了注册表回过头来再看1.6和它的结果在下面,我抬头一看,这似乎是从具有安装(导致回到我原来的问题)多个Java类:
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)
我很感激你们所拥有的任何见解,因为我一直在寻找各种论坛,但似乎没有任何问题.此外,这也发生在我们正在使用的另一台服务器上.谢谢!
更新:没有运气将JAR重新编译为1.6或1.7并匹配JDK.另外,为什么世界上新版本的Java会破坏旧的编译版本呢?
我一直在研究在C#中运行的原型代码应用程序,并使用旧C++代码中的类和函数(以导入的DLL的形式).代码要求是将类对象传递给非托管C++ DLL(来自C#),并将其存储/修改以供C#应用程序稍后检索.这是我到目前为止的代码......
简单的C++ DLL类:
class CClass : public CObject
{
public:
int intTest1
};
Run Code Online (Sandbox Code Playgroud)
C++ DLL函数:
CClass *Holder = new CClass;
extern "C"
{
// obj always comes in with a 0 value.
__declspec(dllexport) void SetDLLObj(CClass* obj)
{
Holder = obj;
}
// obj should leave with value of Holder (from SetDLLObj).
__declspec(dllexport) void GetDLLObj(__out CClass* &obj)
{
obj = Holder;
}
}
Run Code Online (Sandbox Code Playgroud)
C#类和包装器:
[StructureLayout(LayoutKind.Sequential)]
public class CSObject
{
public int intTest2;
}
class LibWrapper
{
[DLLImport("CPPDLL.dll")]
public static extern …Run Code Online (Sandbox Code Playgroud)