2012-02-06 138 views
4

我的C#程序经由Nco3(sapnco.dll)访问SAP。该计划还需要与德尔福合作。我的一些方法从sapnco.dll返回类型:COM互操作,C#,Visual Studio 2010中 - >嵌入互操作类型

public void IRfcTable table(...) { ... } 

在Delphi中这种方法显示为

function table(...): IUnknown { ... } 

我想这IUnknown是因为我的TLB不包括sapnco.dll。我想 “嵌入互操作类型=真” 在Visual Studio中,但随后出现此错误:

错误Interoptypen AUS大会 “C:\ ...” könnennicht eingebettet werden,韦尔DAS ImportedFromTypeLibAttribute-Attribut奥德DAS PrimaryInteropAssemblyAttribute - 属性fehlt。 C:\ sapnco.dll

(互操作类型无法嵌入,因为一些属性丢失)。

这是正确的方式?如果是这样,那么把这些属性放在哪里?

回答

1

sapnco.dll是一个.NET的DLL,所以它不暴露于COM,所以你不能直接在COM环境中使用此类型。您的问题的解决方案是创建一个库来包装COM暴露类sapnco.dll:

作为一个例子:

[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(...) { ... }