在我的工作中,我目前正在开发一个庞大的VB6到C#应用程序移植项目。我目前正在用Java完成一个设计器项目,为翻译的VB表单创建设计器文件。
我遇到的问题是图片和文字太大而无法放入VB表格中,因此存储在FRX文件中。我试图找到一种方法,不必在文本文件中手动编码这些数据,因为需要处理不断添加到VB项目中的新表单,因此不断为它们手动编码文本文件是不切实际的。
我知道VB6中的代码从FRX文件加载图片,并且相信我可以编写一个C#程序,它使用十六进制值从FRX文件中获取长文本,然后让Java加载一些C ++用于包装C#代码的DLL,但这看起来相当繁琐。
更简单的IMO将是使用Java的二进制读取方法,但是在尝试这样做时它会一直返回错误的字节。它可能(我认为)由于Java使用修改后的UTF-8编码,但我不完全确定。
我的问题是,有没有其他可行的方法可以让Java从FRX文件中读取信息而无需更复杂的解决方案?或者有没有人遇到类似的问题,并有一个更实际的解决方案?
非常感谢任何帮助!
问题更新
我现在有一个简单的C#程序,我认为它成功运行,并且我试图强制Java加载C ++ DLL来包装代码。这可能是最简单的解决方案,但我打开问题,因为我觉得必须有一个更简单的方法。 C#程序的示例代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
public class GetFromFRX
{
public string getFromFRX(string filename, int pos)
{
StringBuilder buffer = new StringBuilder();
using (BinaryReader b = new BinaryReader(File.Open("frmResidency.frx", FileMode.Open)))
{
try
{
b.BaseStream.Seek(pos, SeekOrigin.Begin);
int length = b.ReadInt32();
for (int i = 0; i < length; i++)
{
buffer.Append(b.ReadChar());
}
}
catch (Exception e)
{
return "Error obtaining resource\n" + e.Message;
}
}
return buffer.ToString();
}
}