Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 15:20   #1
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию Создание и использование библиотеки DLL .NET Visual C++ на C#

Помогите написать библиотеку на C++ так чтобы ее можно было использовать в C#. Т.е. есть код написанный на C++ в котором есть переменные которые должны принимать значения при вызове данной библиотеки из кода на C# и желательно потом возвращать другие переменные которые принимают значения после выполнения кода в библиотеке. Иначе из C# вызвать библиотеку, передать ей значение переменной A, после выполнения кода библиотеки возвратить результат значение перемнной B.
Дайте пожалуйсто простой пример решения данной проблемы.
Timer32 вне форума Ответить с цитированием
Старый 31.10.2011, 15:33   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В C++
Код:
__stdcall extern "C" __declspec(dllexport) int Sum(int a, int b) {return a+b;}
В C#
Код:
[DllImport("myLib.dll", EntryPoint="Sum", CallingConvention = CallingConvention.StdCall)]
private extern static Int32 DllSum(Int32 a, Int32 b);
Abstraction вне форума Ответить с цитированием
Старый 01.11.2011, 10:56   #3
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

Попробовал создать CLR библиотека классов DLL Visual C++
Код:
#pragma once

using namespace System;

namespace dllk {

	public ref class Class1
	{
		__stdcall extern "C" __declspec(dllexport) int Sum(int a, int b) {return a+b;}
	};
}
ругается на error C2059: синтаксическая ошибка: extern и error C2334: непредвиденные лексемы перед "{"; пропуск вероятного тела функции
Timer32 вне форума Ответить с цитированием
Старый 01.11.2011, 11:58   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Так, стоп. Вам нужен managed C++ или нормальный C++? Если первый, то делаете сборку, C# её должен увидеть как родную.
Abstraction вне форума Ответить с цитированием
Старый 01.11.2011, 13:40   #5
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

Ничего не понял, мне просто нужно пристыковать какимто образом код на C++ к C#.
Все написано на Visual Studio 2010 .NET.
Timer32 вне форума Ответить с цитированием
Старый 01.11.2011, 13:45   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Timer32, есть два варианта кода на С++ это обычный "нативный", на котором пишут проги под вин32. И есть управляемый он идет под Net Framework. Какой случай Ваш?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 01.11.2011, 14:04   #7
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

Наверное который managed. В Visual Studio 2010 чтобы создать библиотеку нашел только CLR->библиотека класоов Visual C++.
А в C# я так понимаю нужно потом подключить ссылку на эту библиотеку. И потом както вызвать ее и получить передать значения переменных.
Timer32 вне форума Ответить с цитированием
Старый 01.11.2011, 14:07   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Попробуйте в Solution Explorer правой кнопкой на References - Add Reference. В окошке с кучей вкладок сходить на Browse и жмакнуть Вашу dll
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 01.11.2011, 14:16   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Нативная DLL называется "Win32 project".
А управляемый код просто собираете в dll, затем в C#-проекте, в свойствах проекта add reference -> from file.
Abstraction вне форума Ответить с цитированием
Старый 01.11.2011, 14:30   #10
Timer32
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 16
По умолчанию

В том то и вопрос как написать эту DLL на С++ она вызывает ошибки, приведенные выше. И код который нужно набрать в C# чтобы получить значения переменных.
Timer32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual C++, Visual C#, Visual basic .Net, или Microsoft.Net Что лучше? _PROGRAMM_ Общие вопросы .NET 14 10.10.2012 19:24
Создание и использование библиотеки DLL Blew Помощь студентам 0 06.02.2011 14:56
Создание и вызов библиотеки dll DM_bite Помощь студентам 3 15.06.2010 12:47
Создание\использование своих DLL библиотек Vol666 Общие вопросы Delphi 5 26.08.2009 11:55
Использование C++ классов из native DLL в .NET C# lexluther Общие вопросы C/C++ 1 31.01.2007 22:00