我的C#程序通过Nco3(sapnco.dll)访问SAP。该程序还需要与Delphi一起使用。我的一些方法从sapnco.dll返回类型:
public void IRfcTable table(...) { ... }
在Delphi中,这个方法显示为
function table(...): IUnknown { ... }
我认为这个IUnknown
是因为我的TLB不包含sapnco.dll。我在Visual Studio中尝试“嵌入Interop Types = true”,但之后会出现此错误:
错误Interoptypen aus Assembly“C:\ ...”könnennichteingebettet werden,weil das ImportedFromTypeLibAttribute-Attribut oder das PrimaryInteropAssemblyAttribute-Attribut fehlt。 C:... \ sapnco.dll
(无法嵌入互操作类型,因为缺少某些属性)。
这是正确的方法吗?如果是这样,在哪里放置这些属性?
答案 0 :(得分:1)
sapnco.dll是一个.NET dll,因此它不会暴露给COM,因此您无法在COM环境中直接使用此类型。您的问题的解决方案是创建一个库来将sapnco.dll包装在COM公开的类中:
举个例子:
[ComVisible(true)]
public interface IComRfcTable
{
public void DoSomething();
}
[ComVisible(true)]
public class ComRfcTable
{
private _rfcTable; // object to wrap
public ComRfcTable(IRfcTable rfcTable)
{
_rfcTable = rfcTable
}
public void DoSomething()
{
_rfcTable.DoSomething();
}
}
然后你的方法必须实现如下:
public IComRfcTable table(...) { ... }