【发布时间】:2012-11-11 02:30:16
【问题描述】:
我目前正在开发一个 Excel 宏,它允许在 Bugzilla 实例中创建错误。 经过一些试验和错误,现在证明可以正常工作。 我想增强客户端,以便可以将屏幕截图添加到新创建的错误中。
我使用的环境有点棘手: 我必须使用 MS Excel 来完成我的任务。 由于 Excel 不理解 XML-RPC,我下载了一个接口 DLL(来自 xml-rpc.net 的 CookComputing.XmlRpcV2.dll),它使 XML-RPC 接口可以从 .NET 访问。 然后我创建了一个额外的 DLL,它可以从 Excel 宏中调用(使用 COM 互操作)。
如前所述,这适用于浏览或添加新错误等任务。 但是在给bug添加附件时,必须将图片转换成base64数据类型。尽管这似乎工作正常,并且虽然创建屏幕截图似乎成功,但图像似乎已损坏并且无法显示。
这是我添加图像的操作: Bugzilla add_attachment 方法接受一个结构体作为输入: http://www.bugzilla.org/docs/4.0/en/html/api/Bugzilla/WebService/Bug.html#add_attachment。 此类型在 C# 中定义,在 VBA 中也可见。
这是结构定义:
[ClassInterface(ClassInterfaceType.AutoDual)]
public class TAttachmentInputData
{
public string[] ids;
public string data; // base64-encoded data
public string file_name;
public string summary;
public string content_type;
public string comment;
public bool is_patch;
public bool is_private;
public void addId(int id)
{
ids = new string[1];
ids[0] = id.ToString();
}
public void addData(string strData)
{
try
{
byte[] encData_byte = new byte[strData.Length];
encData_byte = System.Text.Encoding.ASCII.GetBytes(strData);
string encodedData = Convert.ToBase64String(encData_byte);
data = new Byte[System.Text.Encoding.ASCII.GetBytes(encodedData).Length];
data = System.Text.Encoding.ASCII.GetBytes(encodedData);
}
catch (Exception e)
{
throw new Exception("Error in base64Encode" + e.Message);
}
}
这是我的宏中我要添加附件的部分:
Dim attachmentsStruct As New TAttachmentInputData
fname = attachmentFileName
attachmentsStruct.file_name = GetFilenameFromPath(fname)
attachmentsStruct.is_patch = False
attachmentsStruct.is_private = False
'multiple other definitions
Open fname For Binary As #1
attachmentsStruct.addData (Input(LOF(1), #1))
Close #1
attachmentsStruct.file_name = GetFilenameFromPath(fname)
Call BugzillaClass.add_attachment(attachmentsStruct)
BugzillaClass 是从我的 DLL 向 Excel VBA 公开的接口。
方法add_attachment引用XML-RPC方法add_attachment。
我认为我的问题是从二进制文件转换为 base64。
这是使用我的 C# DLL 中的addData 方法完成的。
转换是否在那里正确完成?
知道为什么图像损坏了吗?
【问题讨论】:
-
你解决了这个“add_attachment”方法的问题了吗?我不确定这是否是内部 API 的问题,但我在 Bugzilla 中写了一个评论#33,他们在其中编写了这个 API 的方法。 bugzilla.mozilla.org/show_bug.cgi?id=412074
标签: c# vba com-interop xml-rpc bugzilla