Форум программистов, компьютерный форум, киберфорум
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. Показов 1374. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru