Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как подключить библиотеку с C# в С++ 
:(
    Опции темы
KuMa1104
Дата 28.10.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Greetings to all!!!!!!!!
Пытался понять Как подключить библиотеку с C#( и платформы .NET в целом) в С++
Вот нашол в нете такой пример.

Код

Библиотека на ШАРПЕ
namespace MyNamespace
{
public class MyClass
{
public static int MyMethod(string text)
{
MessageBox.Show(text);
return 0;
}
}
}
А это на С++
#include "MSCorEE.h"
void StartTheDotNetRuntime()
{
// Подключаем CLR
ICLRRuntimeHost *pClrHost = NULL;
HRESULT hr = CorBindToRuntimeEx(
NULL, L"wks", 0, CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost, (PVOID*)&pClrHost);
hr = pClrHost->Start();
// Теперь можно вызвать метод .Net библиотеки
DWORD dwRet = 0;
hr = pClrHost->ExecuteInDefaultAppDomain(
L"c:\\PathToYourManagedAssembly\\MyManagedAssembly.dll",
L"MyNamespace.MyClass", L"MyMethod",
L"MyParameter", &dwRet);
// Выгружаем CLR
hr = pClrHost->Stop();
// Убираем за собой
pClrHost->Release();
}
CorBindToRuntimeEx – возвращает указатель на интерфейс ICLRRuntimeHost.
ICLRRuntimeHost::Start – позволяет запустить CLR Runtime на выполнение или подключиться к уже запущенному экземпляру.
ICLRRuntimeHost::ExecuteInDefaultAppDomain – позволяет загрузить в CLR указанную библиотеку с управляемым кодом


Ноу меня выдаёт 
Код

Error    3    error LNK2001: unresolved external symbol _CorBindToRuntimeEx@24    Main.obj    С++MyLin

Пожалуста попробуйте запусти это у себя, и попробовать. Думаю это может быть комуто интересно.
Я с++ знаю не очень хорошо и поэтому пока что немного теряюсь в дагадках почему так происходит.

Я создавал всё на VS2008. 


Это сообщение отредактировал(а) KuMa1104 - 28.10.2009, 21:23


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
jonie
Дата 28.10.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



это все "методы на грани фола". Нельзя так делать. Для того чтобы работать в С++ с кодом .NET нужно использовать либо C++ Managed либо делать для .NET библиотеки COM wrapper (благо его tlbexp делает автоматически).....
Какой метод вас больше интересует?)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
KuMa1104
Дата 28.10.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Если использовать C++ Managed то возникает такая проблема.

Библиотека  C++ Managed компилирую, всё работает
Код

using namespace System;  // ограничемся простым случаем
 class Class1
    {
        // TODO: Add your methods for this class here.

    public:

        void fnc()
        {
            System::Console::WriteLine("AAAAAAAAAAA");
            //cout<<"AAAAAAAAAAA"<<endl;
        }
    };
}


А вот исполняемый проект к которому я её подключаю
Код

#include <iostream>
using namespace std;
#include "TedtLib2.h"
void main()
{
    cout<<"YD"<<endl;
    char a;
    cin>>a;
    
}


Как видите я ещё даже её не как не использовал.
А мне компилятор уже выдаёт ошибку.

Код

Error    1    error C2871: 'System' : a namespace with this name does not exist    c:\documents and settings\макс\мои документы\visual studio 2008\projects\с++ lines\с++ lines\TedtLib2.h    7    С++ Lines



Добавлено @ 22:59
Насколько я понемю это от того что Обычный с++ знать не знает ничег об 
namespace System но в проект на чистом с++ её не льзя подключить.

А главное получаеться что каждый раз когда необходимо в какомто модуле обратиться к своей библиотеке необходимо подключать все используемые в ней стандартные библиотеки System например???????

Это сообщение отредактировал(а) KuMa1104 - 28.10.2009, 23:04


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
KuMa1104
Дата 28.10.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Да кстати как Вы могли заметить.
То здесь подключение идёт за счёт тог что я просто добавил .h .cpp  фаилы в каталог и прописал 
Код

#include "TedtLib2.h"

На чистом С++ это работает а с С++/CLR  нет из за System ну незнает от её и всё тут(((

Может надо как то через .lib делать ?
Или результат такойже будет???

Это сообщение отредактировал(а) KuMa1104 - 28.10.2009, 23:21


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
KuMa1104
Дата 28.10.2009, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: нет
Всего: 3



Сделал в виде библиотеки 

Пытаюсь её подключить.
Код

#include <iostream>
using namespace std;
#pragma comment (lib, " C:\\Documents and Settings\\Макс\\Мои документы\\Visual Studio 2008\\Projects\\TedtLib2\\Debug\\TedtLib2.dll")
void main()
{
    cout<<"YD"<<endl;
    char a;
    cin>>a;
}


Выдаёт ошибку
Код

Error    1    fatal error LNK1104: cannot open file ' C:\Documents and Settings\Макс\Мои документы\Visual Studio 2008\Projects\TedtLib2\Debug\TedtLib2.dll'    С++ Lines    С++ Lines

Может не правильно это делаю, что линкеру не нравиться?
Как надо подключать правильно?


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
jonie
Дата 29.10.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



KuMa1104, почитайте для  начала как в C++ Managed работать вообще, и как чего подключать...
можно погуглить


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.