如何P调用返回接口的C ++函数

时间:2018-09-11 11:48:56

标签: c# c++ pinvoke

我试图找出如何从C ++返回ISubmitter并在C#端使用它。

这是标题(* .h):

class ISubmitter : public ISubRefCounter
{
public:
    virtual ~ISubmitter() {}

    virtual Sett::MAIN::SUBERRORS Prepare( const Sett::MAIN::IDoc *pDoc, const char *aName = NULL, uint32_t aVal = 255 ) = 0;

    virtual SUBERRORS Send( eTTYPE aPType = Announce ) = 0;

    virtual ISender * CreateSenderInstance( INFO *info ) = 0;
}

class ISubRefCounter
{
public:
    virtual ~ISubRefCounter() {};

    virtual int32_t AddRef()  = 0;

    virtual int32_t Release() = 0;
};

#if defined (__cplusplus)
    extern "C" {
#endif
        ISubmitter* SUB_API_CALL GetSubmitterInterface( void );
#if defined (__cplusplus)
    }
#endif

我已经像这样在C#上实现:

public interface ISubmitter : ISubRefCounter
{
    SUBERRORS Prepare(ref IDoc pDoc, string aName = "", uint aVal = 255 );

    SUBERRORS Send(eTTYPE aPType = eTTYPE.Announce);

    ISender CreateSenderInstance(ref INFO info);
}

public interface ISubRefCounter
{
    int AddRef();

    int Release();
}

并尝试使用单个接口,而不实现 ISubRefCounter ,而是将所有内容都嵌入 ISubmitter 中,例如:

public interface ISubmitter
{
    SUBERRORS Prepare(ref IDoc pDoc, string aName = "", uint aVal = 255 );

    SUBERRORS Send(eTTYPE aPType = eTTYPE.Announce);

    ISender CreateSenderInstance(ref INFO info);

    int AddRef();

    int Release();
}

C#dll导入:

[DllImport("SettSubmitter.dll", CharSet = CharSet.Ansi)]
public static extern ref ISubmitter GetSubmitterInterface();

调用 GetSubmitterInterface()时,我得到:

  

“无法封送'返回值':无效的托管/非托管类型   组合。”

我在做什么错了?

0 个答案:

没有答案