Jak użyć wskaźnika do interfejsu z DLL napisanej w C++?

0

Witam,

Szukałem ale nie znalazłem więc proszę o pomoc, w C# jestem bardzo zielony a muszę go użyć.

W Borland C++ mam napisaną dll-ke z interfejsem i funkcją zwracającą wskaźnik do obiektu interfejsu:

extern "C"
{

  class TMyInterface
  {
    public:
      TMyInterface() { }
      virtual ~TMyInterface() { }

      virtual int GetTest() = 0;
  };

  __declspec(dllexport) TMyInterfacee* CreateInterface();
  __declspec(dllexport) void DestroyInterface(TMyInterface* Interface);
}
//---------------------------------------------------------------------------
class TImpl : public TMyInterface
{
  public:
    __fastcall TImpl() {};

    int GetTest() { return 1; }
};
//---------------------------------------------------------------------------
TMyInterface* CreateInterface()
{
  return new TImpl();
}
//---------------------------------------------------------------------------
void DestroyInterface(TMyInterface* Interface)
{
  delete (TImpl*)Interface;
}
//---------------------------------------------------------------------------

Jak użyć eksportowany interfejs w C#? Z tego co znalazłem trzeba utworzyć również interface w C# który będzie mapował poszczególne funkcje:

namespace MyInterface
{
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	
    public interface IMyInterface
    {
        [PreserveSig]
        int GetTest();
    }
}


    [DllImport("TestDLL.dll")]
    public static extern IMyInterface CreateInterface();
    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IntPtr handle = CreateInterface();
            if (IntPtr.Zero == handle)
            {
            }
            else
            {
            }
        }
0

ale z czym masz problem?

0

To że pisząc jak powyżej nie idzie się dostać do funkcji z Dll. Na różne sposoby ale zawsze jest jakiś problem dlatego proszę o zweryfikowanie co jest źle, czego brakuje w powyższym kodzie. Może innym też się przyda rozwiązanie takiego problemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1