C # DLL Импорт с VC ++ - PullRequest
       25

C # DLL Импорт с VC ++

0 голосов
/ 09 декабря 2011

Я новичок в Visual Studio 2010,

У меня есть DLL, написанная на C #, и она работает с VB.NET, Теперь я хочу использовать ее с VC ++, Можете ли вы мне помочь?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2011

Если вы планируете использовать расширения .NET в своем проекте VC ++, вам просто нужно добавить ссылку на вашу C # DLL в вашем проекте VC ++.

Если вы планируете использовать чистый C ++, выВам нужно изменить вашу C # DLL, чтобы она была COM-Visible, и сгенерировать библиотеку типов, которую вы импортируете в ваш проект C ++.

1 голос
/ 09 декабря 2011

Вы можете получить доступ к функциям из нативной DLL (написанной на C ++) из .NET, используя PInvoke. Чтобы использовать управляемую DLL из собственного кода (например, вызвать метод C # из кода C ++), вам нужно обернуть управляемый код в компонент COM и использовать этот объект COM из C ++

0 голосов
/ 09 декабря 2011

Или вы можете создать Manager C ++ DLL, которая будет ссылаться и реализовывать все или пользовательские объекты из C # DLL. После этого вы можете создавать методы dllexport в вашей MCPP DLL. И затем вы можете получить доступ к C # DLL через MCPP DLL, используя методы LoadLibrary (...) / GetProcAddress (...). Пример:


    using namespace System;
    using namespace System::Windows::Forms;

    __declspec(dllexport) LPVOID GetPluginInterface()
    {
        return (IWithExecuteCommandMethod*)&theApp;
    }
    bool CClass::ExecuteCommand()
    {
        if(Threading::Thread::CurrentThread->TrySetApartmentState(System::Threading::ApartmentState::STA))
        {
            Flatbed::SomeDialog ^pDialog=gcnew Flatbed::SomeDialog();
            pDialog->ShowDialog();
        }
        else
        {
            Threading::Thread ^pDialog=gcnew Threading::Thread(gcnew Threading::ThreadStart(ThreadProc));
            pDialog->SetApartmentState(Threading::ApartmentState::STA);
            pDialog->Start();
        }

        return false;
    }

0 голосов
/ 09 декабря 2011

Пойти в другую сторону легко, используя P / invoke.Вызов управляемого кода из неуправляемого - это обман.Один хороший вариант - это COM, но есть альтернатива.Роберт Гизеке опубликовал отличный проект , который позволяет выставлять управляемые методы в качестве неуправляемых экспортов DLL.

Это очень просто в использовании.Вы просто скачиваете шаблон Visual Studio, создаете проект на его основе, добавляете свой код и помечаете экспорт как атрибут DllExport.

...