Я пытаюсь выяснить, как вернуть ISubmitter из C ++ и использовать его на стороне 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 () Я получаю:
'Cannot marshal' возвращаемое значение ': неверный управляемый / неуправляемый тип
комбинация.
Что я делаю не так?