在Java中移植GetModuleFileName

时间:2014-07-16 14:50:00

标签: java c++

我在C ++中有一部分代码,我必须在Java中移植:

GetModuleFileName(AfxGetInstanceHandle(),strPath.GetBuffer(MAX_PATH),MAX_PATH - 1);
strPath.ReleaseBuffer();

我不确定如何解决这个问题。我在C ++方面没有太多经验,尤其是对于Windows函数。我试图创建的业务逻辑是:

我们要创建或编辑HTML文件并将其另存为:

strPath+"CaseRerorts.htm"

代码的C ++端使用:

ofstream ofile(strPath, ios::trunc|ios::app, filebuf::sh_read);

然后在ofile上写东西。

如果htm文件存在,则用新的文件覆盖它。

我猜测我必须使用OutputStream和PrinstStream。然而,主要的问题是我不知道如何让strPath与C ++版本的代码相同。有任何想法吗?感谢。

2 个答案:

答案 0 :(得分:0)

C ++代码似乎在调用WinAPI函数,该函数提取当前运行的应用程序实例的“模块文件名”。这不会直接转换为Java,因此您必须确定将用作模拟的内容。

如果字符串必须与原始应用程序的某个特定实例生成的字符串完全匹配,那么您只需对该值进行硬编码即可。如果它必须更普遍地复制原始的精神,那么你将需要找出你想要使用的可执行文件名的类似物(“java.exe”可能对此目的没用)。也许main()方法是应用程序起点的类的名称就是你想要的。如果你的应用程序是单线程的,那么你可以通过生成和检查堆栈跟踪来获得它,但是否则你可能需要做一些保留这些信息的规定,以便以后再读回来。

答案 1 :(得分:0)

我最终没有必要创建这个功能,但从我发现的,通过使用方法来做一个问题:

servletRequest.getSession().getServletContext().getRealPath("/");

这不会复制GetModuleFileName函数,但是类似。