我试图找出如何从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()时,我得到:
“无法封送'返回值':无效的托管/非托管类型 组合。”
我在做什么错了?