Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1

Взять из С++ кода строку и передать в консольный C# проект

15.11.2014, 19:47. Показов 1337. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В С++/CLI пока что не в зуб ногой в отличие от знаний C# и платформы .NET. У меня вопрос, как мне получить строку из С++ неуправляемого кода и вывести её на консоль в управляемом коде, но в C# проекте?

Как вижу это я: С++/CLI библиотека и C# проект. Добавляю ссылку на либу и вызываю метод какого-то класса в либе, а либа уже у себя там вызывает функцию из неуправляемого кода и возвращает строку.

Зачем это надо: защита от дурака, как-нибудь строку зашифруем, перемешаем символы, не суть, что угодно. Главное, чтобы нельзя было рефлектором открыть C# проект и вытянуть эту строку. Или увидеть алгоритм как эта строка расшифровывается.

Я пробовал решить этот вопрос так:
Создать DLL на С++ и вызвать ее функции

Но в реальном проекте это ни в какую не работает. А в консольном простом работает, почему вообще непонятно. Так что решил попробовать другой путь.

C++
1
2
3
4
5
6
7
8
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются,
// но не часто изменяются
 
#pragma once
#pragma unmanaged
 
char* GetSystemPassword();
C++
1
2
3
4
5
6
7
8
9
10
11
12
// stdafx.cpp: исходный файл, содержащий только стандартные включаемые модули
// ClassLibrary.pch будет предкомпилированным заголовком
// stdafx.obj будет содержать предварительно откомпилированные сведения о типе
 
#include "stdafx.h"
 
#pragma unmanaged
 
char* GetSystemPassword()
{
    return "PASSWORD";
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// ClassLibrary.h
 
#pragma once
 
using namespace System::Runtime::InteropServices;
using namespace System;
 
namespace ClassLibrary {
 
    public ref class TestClass
    {
    public:
        String^ GetPassword()
        {
            char * ch = GetSystemPassword();
 
            return CharToSysString(ch);
        };
 
    private:
        System::String^ CharToSysString(char* ch)
        {
            char * chr = new char(*ch);
            System::String^ str;
            for (int i = 0; chr[i] != '\0'; i++)
            {
                str += wchar_t(ch[i]);
            }
            return str;
        };
    };
 
 
}
C++
1
2
3
4
5
// Главный DLL-файл.
 
#include "stdafx.h"
 
#include "ClassLibrary.h"
Ничего не работает . В C# проекте вообще не видит класс TestClass

Добавлено через 2 часа 16 минут
Народ, это что-то нереально сложное? Помогите решить простейшую проблему, если есть опыт программирования на С++ и C++/CLI. Мне же нужно убить не одну неделю не вылазия из-за книг, чтобы вычитать все тонкости работы. Пока в планах нет всерьёз учить это, пока хватает ASP.NET, там тоже есть что осваивать. На всё сразу нет времени.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2014, 19:47
Ответы с готовыми решениями:

Где взять консольный компилятор?
Надоело мне эти IDE хочу попробывать по программировать в консольном компиляторе, вот только где его взять подскажите пожалуйста. Уже...

Какой консольный роутер лучше взять?
Всем привет! Нужен терминальный сервер, от Cisco, куда можно будет подключать 16 устройств консольным кабелем, на "всякий...

Консольный проект
Можно ли на С++ Builder 6 создать консольный проект. Если да то кака?

15
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 21:00
Это кошмар какой-то
Цитата Сообщение от Casper-SC Посмотреть сообщение
C++
1
2
3
4
System::String^ CharToSysString(char* ch)
{
    ........
};
Можно так :
C++
1
2
3
4
5
6
7
8
// stdafx.h : include file for standard system include files,
// .............
 
#pragma once
//#pragma unmanaged
#pragma managed(push, off)
wchar_t * GetSystemPassword();
#pragma managed(pop)
C++
1
2
3
4
5
6
7
8
#include "stdafx.h"
//#pragma unmanaged
#pragma managed(push, off)
wchar_t * GetSystemPassword()
{
    return L"PASSWORD";
}
#pragma managed(pop)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// ClassLibrary.h
 
#pragma once
 
 
 
using namespace System::Runtime::InteropServices;
using namespace System;
 
namespace ClassLibrary {
 
    public ref class TestClass
    {
    public:
        String^ GetPassword()
        {
            wchar_t * ch = GetSystemPassword();
 
            return gcnew String(ch);
        }
    };
}


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using System;
using ClassLibrary;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            TestClass testClass = new TestClass();
            Console.WriteLine(testClass.GetPassword());
        }
    }
}
Декомпилятором бегло просмотрел dll , не нашел заветное "PASSWORD" .
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 21:19  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Это кошмар какой-то
Да это со стек оверфлоу нагуглил. Мне нужно было чтобы вообще заработало, скомплилось для начала

Добавлено через 4 минуты
MrCold,
Необработанное исключение типа "System.BadImageFormatException" в Microsoft.VisualStudio.HostingProcess.Ut ilities.dll

Дополнительные сведения: Не удалось загрузить файл или сборку "ClassLibrary, Version=1.0.5432.38339, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Была сделана попытка загрузить программу, имеющую неверный формат.

Добавлено через 39 секунд
Всё скопировал, вроде всё верно, но не работает.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 21:23
Проверил .Нормально.
Миниатюры
Взять из С++ кода строку и передать в консольный C# проект  
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 21:34  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Проверил .Нормально.
По прежнему не работает. Что я делаю не так?
Вложения
Тип файла: zip ConsApp_CppDll.zip (15.4 Кб, 4 просмотров)
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 21:39
Цитата Сообщение от Casper-SC Посмотреть сообщение
Что я делаю не так?
Там же файлы сборки С++/CLI . Им нужен С++ компилятор.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 21:41  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Там же файлы сборки С++/CLI . Им нужен С++ компилятор.
Что мне нужно сделать, чтобы заработало?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 21:44
Сборку собрать С++ компилятором . В С# проект добавить ссылку на эту сборку.
Не знаю других способов.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 21:51  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Сборку собрать С++ компилятором . В С# проект добавить ссылку на эту сборку.
Не знаю других способов.
Не помогло. Проект строится, но не работает, когда запускаешь. Какие-то неведомые проблемы...
Отдельно сделал сборку. Собрал. Тот же результат.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 21:53
На всех студиях проверял . Даже на VS 2015 PREVIEW
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 21:56  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
На всех студиях проверял . Даже на VS 2015 PREVIEW
Мой проект? Или свой? Если свой, скинь его. Может он заработает. Может у меня студия глючная. К примеру, Nuget пакеиы не ставит, не знаю в чём причина, но не ставит. С другой стороны, всё же работает как-то, проекты компилятся, студия своё дело делает.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 22:01
Мой проект, и длл там
Вложения
Тип файла: zip ConsoleApplication1.zip (385.7 Кб, 4 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 22:03  [ТС]
Цитата Сообщение от MrCold Посмотреть сообщение
Мой проект, и длл там
C C# проектом так-то всё понятно. Мне длл нужны исходники )
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 22:18
чего то интернет у меня не фурычит , не смог на форум загрузить.

От tezaurismosis: загрузил

винда у меня 64 бита. Там может нужно очистить решение и перестроить.
Вложения
Тип файла: zip ClassLibrary.zip (8.69 Мб, 3 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
15.11.2014, 22:28  [ТС]
MrCold, в общем не судьба. Не пашет у меня ничего после того, как я скомпилю проект. твоя либа работала, но мне так-то самому ещё код писать )
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
15.11.2014, 22:33
Твоя сборка у меня тоже работает .
Если комментировать строки
#pragma managed(push, off)
#pragma managed(pop)
то "PASSWORD" сразу же нашелся . ( ildasm-мом в файл IL-код сбросил).
Ну это так , к слову .
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2014, 22:33
Помогаю со студенческими работами здесь

Не могу создать консольный проект
Я обучаюсь С++ но не могу разобраться, как пользоваться Visual C++... видимо он у меня криво установился или проблемы с фрэймворком. ну в...

Почему не компилируется консольный проект?
Можете сказать, в Visual Studio 2010 почему не компилируется консольный проэкт Добавлено через 48 секунд С++ Добавлено через 3...

Консольный проект переписать в Win forms
Код не мой нашёл на этом форуме)) using System; using System.Collections.Generic; using System.ComponentModel; using...

Как открыть консольный проект в C++ Builder?
Как открыть консольный компилятор в C++ Builder?

Консольный скрипт для Linux (проект в универе)
Всем доброго времени суток! Нужно написать небольшой скрипт с использованием консоли Linux! Нужно это сделать как проект - должна быть...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru