Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
98 / 101 / 30
Регистрация: 21.10.2012
Сообщений: 320

Использование С++ библиотеки

07.07.2013, 22:36. Показов 1577. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.

Как создать экземпляр класса из библиотеки на плюсах в шарпе ?
C# компилятор говорит, что ClassesLibrary.Test недоступен из-за его уровня защиты, и я его конечно понимаю. Есть способы ? Спасибо.

Test.h

C++
1
2
3
4
5
6
7
8
namespace ClassesLibrary
{
    class Test
    {
        public:
            __declspec(dllexport) void Method();
    };
}
Test.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "Test.h"
 
namespace ClassesLibrary
{
    __declspec(dllexport) void Test::Method()
    {
        const int SIZE_ARRAY = 80;
        int array[SIZE_ARRAY];
 
        for (int i = 0; i < SIZE_ARRAY; ++i)
        {
            array[i] = i;
            std::cout << array[i] << std::endl;
        }
    }
}
Program.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using ClassesLibrary;
 
namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Test test = new Test(); // ошибка ClassesLibrary.Test недоступен из-за его уровня защиты
 
            Console.Read();
            return;
        }
    }
}
Если метод глобальный, то проблемы нету. Использую его вот так:

C++
1
2
3
4
5
6
extern "C"
{
    __declspec(dllexport) void Method()
    {
    }
}
C#
1
2
[DllImport("ClassesLibrary.dll")]
public static extern void Method();
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.07.2013, 22:36
Ответы с готовыми решениями:

Использование C++ библиотеки в C#
А что делать, если есть только dll библиотека на неуправляемом с++? Тогда ее можно использовать в с#? Если да, то как?

Использование библиотеки классов
я создал проект class library3 откомпилировал в dll потом создал другой проект. project-&gt;add reference и выбрал classlibrary3.dll ...

Использование библиотеки VkNet
Привет, не могу понять в чем причина ошибки. Хочу сделать пост на стену в вк, пытаюсь вызвать MAKEpost(); Мне пишет Значение...

5
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
07.07.2013, 22:53
Цитата Сообщение от Denno Посмотреть сообщение
библиотеки на плюсах
Странная библиотека . C++\Cli ?
0
98 / 101 / 30
Регистрация: 21.10.2012
Сообщений: 320
07.07.2013, 23:06  [ТС]
С поддержкой clr среды.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
08.07.2013, 01:33
Цитата Сообщение от Denno Посмотреть сообщение
Есть способы ?
1)
Цитата Сообщение от Denno Посмотреть сообщение
С поддержкой clr среды.
Сделать класс Test управляемым и открытым
C++
1
public ref class Test {
2) Иначе делать обычную ДЛЛ
header.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef HEADER
#define HEADER
#include <iostream>
 
        extern "C"
        {
            class __declspec(dllexport) Test
            {
                public:
                    void Method();
            };
        }
#endif //HEADER
source.cpp
C++
1
2
3
4
5
6
7
8
9
#include "header.h"
extern "C"
{
    __declspec(dllexport) void Test::Method()
    {
      ///---------------------------------
    }
 
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        [StructLayout(LayoutKind.Sequential)]
        public class Test
        {
              [DllImport(@"TestDll.dll")]
            public static extern void Method();    
        }   
 
        static void Main(string[] args)
        {         
           Test.Method();
           Console.ReadKey();
        }
    }
1
98 / 101 / 30
Регистрация: 21.10.2012
Сообщений: 320
09.07.2013, 23:54  [ТС]
Что-то по второму способу выдает необработанное исключение : Не удается найти точку входа в Method в TextDll.dll
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
10.07.2013, 11:33
Цитата Сообщение от Denno Посмотреть сообщение
Не удается найти точку входа в Method в TextDll.dll
Через утилиту dumpbin можно посмотреть как имя метода декорирует компилятор
В командной строке VisualStudio вводим dumpbin /EXPORTS TextDll.dll

Находим наш метод , будет нечто подобное : ?Method@@QAEXH@Z

Теперь в параметрах атрибута указываем точку входа - пишем искаженное имя
C#
1
2
  [DllImport(@"TestDll.dll", EntryPoint= "?Method@@QAEXH@Z")]
            public static extern void Method();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2013, 11:33
Помогаю со студенческими работами здесь

Использование сторонней библиотеки
Добрый день. Есть библиотека, которая при попытке загрузить ее с помощью Assembly a = Assembly.LoadFrom(@&quot;C:\Program Files...

Использование файла библиотеки
Добрый день. Моя программа использует сторонний dll, актуальную версию которого можно получить установив свежий драйвер кассы. Различий в...

Использование функции из библиотеки Excel
Всем доброго времени суток, у меня проблема с работой библиотеки Exel(некоторыми их функциями) Всё подлкючил using Excel =...

Использование библиотеки, работающей с xml файлом
Доброго времени суток! Помогите пожалуйста с решением задачи. Суть задачи: есть библиотека(c#), которая будет работать с xml файлом.а...

Использование команды git pull с использованием библиотеки LibGit2Sharp
Добрый день коллеги! Нужна помощь, не получается найти примеры или подобное решение. Мне нужно вытягивать обновления из определенной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru