FAXCOMEXLib和返回类型

时间:2018-02-13 14:59:02

标签: c# com activex fax

我有很久以前在VB 6.0中构建的ActiveX控件,以方便传真,现在我需要将此控件有效地转换为C#类库。

我已经添加了对FAXCOMEXLib库的引用,并且Visual Studio在查看对象,属性和方法时没有任何问题,但是当我编译我的DLL时遇到了两个问题。 首先,类库似乎只包含FAXCOMEXLib中实际在我自己的库中使用的属性和方法。这是一个问题,因为我通过只读属性公开COM对象。

public FaxServer   Server    {get { return m_Server;  }}
public FaxDocument Document  {get { return m_Document;}}

但是如果调用这些属性并尝试使用返回的对象,则只能访问有限数量的方法和属性。

FaxDocument has more than just ConnectedSubmit()

我认为这可能是一个编译器选项,可以删除未使用的代码,但我找不到关闭它的选项。

我的第二个问题是FaxServer.Connect()方法返回HRESULT according to the documentation,但Visual Studio将其视为void返回。我不能拥有这个,因为我需要能够检查连接是否成功。

m_Server = new FaxServer();
if (m_Server.Connect("") == 0) // error CS0019 here
  throw new Exception("Could not connect to Server.");

生成错误CS0019“运算符'=='无法应用于'void'和'int'类型的操作数”

我不知道为什么它认为FaxServer.Connect()返回void。

FaxServer in the Object Browser

非常感谢任何帮助。

谢谢, 肯

1 个答案:

答案 0 :(得分:1)

首先,VS将从ActiveX组件类型库生成一个.NET包装器(然后嵌入到项目的输出中)。不要让VS这样做,你可以1.使用Tlbimp.exe生成.NET包装器,2。在项目中引用该包装器。请参阅导入类型Library as an Assembly

其次,非成功的HRESULT将转换为异常,因此您可以使用try…catch检测到失败。

(如果您想使用S_FAILED和其他成功代码来区分失败级别:您不能。您在C ++中创建COM包装器的唯一选择是在{{1}中提供成功详细信息但是你说组件是用VB编写的,这种情况不适用。)