2016-02-25 3 views
1

Я пытаюсь использовать C# dll в C++. Я разработал C# dll.с использованием C# dll в C++

Я пытался добавить его в качестве ссылки на C++ файл, он показал предупреждение в

Не удалось добавить ссылку
- Цели более позднюю версию платформы .NET Framework
- Не .Net сборка
- Не зарегистрированное управление ActiveX

поэтому я добавил DLL, как следующие в моей C++ файл обертки. Я смог получить доступ к классам, присутствующим в C# dll.

#using <C:\Users\New\Documents\Visual Studio 2015\Projects\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll> 
using namespace csharp; //namespace in which managed class is present 
#include "Header.h" 
extern "C" 
{ 
    __declspec(dllexport) int func() 
    { 
     managedClass^ r = gcnew managedClass(); 
     someClass^s = gcnew someClass(); 
     s->name = "xyz"; 
     return r->getString(s); 
    } 
} 

Затем я импортировал обертка DLL на C++ консольное приложение следующим

#include <iostream> 
#include <Windows.h> 
#pragma comment(lib,"C:\\Users\\New\\Documents\\Visual Studio 2015\\Projects\\C++Wrapper\\Debug\\C++Wrapper.lib") 
#include <C:\Users\New\Documents\Visual Studio 2015\Projects\C++Wrapper\C++Wrapper\Header.h> 
void main() 
{ 

    int result = func(); 
    std::cout << result; 
    getchar(); 
} 

Но я получаю ошибку следующим образом:

Необработанное исключение в 0x7479D928 (KernelBase.dll) в C++ ClientPro.exe: 0xE0434352 (параметры: 0x80070002, 0x00000000, 0x00000000, 0x00000000, 0x73790000).

У меня такая же ошибка, когда я пытаюсь загрузить DLL с помощью функции LoadLibrary (libpath).
Когда я искал эту ошибку, я узнал, что не смог найти файл. На каком этапе я ошибся. Что мне нужно исправить, чтобы использовать C# dll в C++?
Редактировать
1) Я отредактировал свой файл оболочки C++. Я хочу создать экземпляр для класса в C# dll, а также передать его как параметр функции в одну и ту же DLL.
Вот почему я не пошел на другой метод, в котором мы могли экспортировать только функции с использованием открытого интерфейса, мы не смогли бы получить доступ к классам.
2) Я включил/clr в своих проектах.

+0

Возможный дубликат - http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c – ChrisF

+0

Возможный дубликат [Вы можете вызвать C# DLL из библиотеки DLL?] (Http://stackoverflow.com/questions/728325/can-you-call-ac-sharp-dll-from-ac-dll) – Zippy

+0

Эти ссылки не помогли. Я не знаю, знаю ли я их использовать. Я отредактировал мой вопрос. Будут ли ссылки по-прежнему помогать? – Fresher

ответ

0

1) Используйте CCW (Com Callable Wraper). Чтобы отметить вашу управляемую (C#) сборку с помощью «Регистрация для COM-взаимодействия», выполните следующие шаги:

Шаг 1. С проектом, выбранным в обозревателе решений, в меню «Проект» выберите «Свойства». Шаг 2. Перейдите на вкладку «Компилирование» в Visual Basic. Перейдите на вкладку «Сборка» на C#. Шаг 3. Установите флажок Register for COM interop.

еще вы можете посетить

а) http://msdn.microsoft.com/en-us/library/ms404285.aspx

Для получения более подробной информации по теме «Как назвать управляемый DLL из родной Visual C++ кода

Например смотрите здесь

http://www.codeproject.com/Articles/16206/Call-C-code-from-C-and-read-an-array-of-struct-whi

2) Используйте обратный P/вызывать, как показано ниже:

http://tigerang.blogspot.in/2008/09/reverse-pinvoke.html

Когда вы используете обратный P/Invoke, будьте осторожны при сортировке параметров.