Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
28 / 22 / 11
Регистрация: 24.01.2011
Сообщений: 476
1

Что можно сделать на языке C++, но нельзя сделать на C#

23.03.2015, 22:39. Просмотров 5051. Ответов 19
Метки нет (Все метки)


Расскажите пожалуйста, что можно сделать на языке C++, но нельзя сделать на C#. И наоборот)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2015, 22:39
Ответы с готовыми решениями:

Что можно/нельзя сделать на Конструкторе от ucoz?
Здравствуйте. К знакомому с предложением работать программистом обратился молодой человек, создает...

Как сделать так, что-бы текст из TextBox нельзя было убрать, но можно скопировать
Здравствуйте я новичёк в изучении c#. Как сделать так что-бы текст нельзя было убрать только...

Что можно такого на SQL написать, чего нельзя сделать с использованием языка общего назначения?
Добрый день! Что можно такого на SQL написать, чего нельзя сделать с использованием языка общего...

Select как сделать поле которое можно выбрать, но нельзя передать в форме
Есть select <form action="/test.php" method="get"> <select name="POSITION" > ...

19
Эксперт С++
1926 / 1759 / 258
Регистрация: 03.05.2011
Сообщений: 4,019
Записей в блоге: 11
23.03.2015, 23:23 2
Цитата Сообщение от HAIRY Посмотреть сообщение
что можно сделать на языке C++, но нельзя сделать на C#
ну например ассемблерная вставка.
когда долго работаешь на плюсах, а потом что-то нужно написать на шарпе, то больше всего не хватает typedef, всяких там memset или memcpy, да и вообще простого вызова api'шных функций.

Цитата Сообщение от HAIRY Посмотреть сообщение
И наоборот
создать GUI без использования api, mfc и прочего.
2
28 / 22 / 11
Регистрация: 24.01.2011
Сообщений: 476
23.03.2015, 23:57  [ТС] 3
получается у С++ лучше преимущества?
0
Эксперт С++
1926 / 1759 / 258
Регистрация: 03.05.2011
Сообщений: 4,019
Записей в блоге: 11
24.03.2015, 01:13 4
Цитата Сообщение от HAIRY Посмотреть сообщение
получается у С++ лучше преимущества?
всё зависит от конкретной задачи. C++ я в основном использую для хуков, хака, работы с памятью, библиотек. А если что-то нужно быстро написать (причем на GUI для удобства, с использованием всяких контролов), к примеру программку для сравнения файлов, конвертер, те же трейнеры для игр, арифметические вычисления, то использую C# - на нём всё это проще и удобнее.
3
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
24.03.2015, 11:37 5
Цитата Сообщение от _lunar_ Посмотреть сообщение
больше всего не хватает typedef
using же.

Цитата Сообщение от _lunar_ Посмотреть сообщение
всяких там memset
Если часто нужно, то можно один раз написать и использовать
С другой стороны, при довольно ограниченной прямой работе с памятью эта функция не настолько востребована, чтобы вносить ее во фреймворк.

Цитата Сообщение от _lunar_ Посмотреть сообщение
или memcpy
Array.Copy, Buffer.BlockCopy, Marshal.Copy.

Цитата Сообщение от _lunar_ Посмотреть сообщение
да и вообще простого вызова api'шных функций.
Интероп через DllImport + extern же.
Это для функций, у которых нет готовой обертки во фреймворке.

Вот макросы — это да.

Но в целом, конечно, решать на шарпе низкоуровневые задачи, под которые заточены плюсы — это все равно что карьерным экскаватором бельмо на глазу удалять.
3
Заблокирован
24.03.2015, 12:50 6
C# легко применяется для хаков, ботов и прочего. И любые инжекты делаются. На плюсах пишут сложные системы, требующие безупречной и точной работы. Например, космический софт
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
24.03.2015, 16:13 7
Недавно узнал, что на шарп нельзя адекватно отобразить структурку примерно следующего вида:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef STRUCT_C {
      int I;
      union {
            B b;
            A a;
      }
}
 
typedef B {
      int I;
      char CB[];
}
 
typedef A {
      int I;
      char CA[];
}
Прошу простить, если напутал с синтаксисом плюсов, но суть в том, что не получается, используя StructLayout.Explicit, создать аналог союза структур, содержащих в себе char[];
0
freeba
24.03.2015, 16:19
  #8

Не по теме:

Цитата Сообщение от AvizerScript Посмотреть сообщение
На плюсах пишут сложные системы, требующие безупречной и точной работы. Например, космический софт
Как раз на плюсах такие системы не пишут. :D

0
Заблокирован
24.03.2015, 16:28 9
Это был злонамеренный жест в сторону С++
0
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
24.03.2015, 16:38 10
Цитата Сообщение от vJRoF Посмотреть сообщение
на шарп нельзя адекватно отобразить структурку примерно следующего вида
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
[StructLayout(LayoutKind.Explicit)]
struct STRUCT_C
{
    [FieldOffset(0)]
    public int I;
 
    [FieldOffset(4)]
    public A a;
 
    [FieldOffset(4)]
    public B b;
}
 
unsafe struct A
{
    public int I;
    public fixed char CA[5];
}
 
unsafe struct B
{
    public int I;
    public fixed char CB[5];
}
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
24.03.2015, 17:06 11
kolorotur, так проблема в том, что длина сишной строки не известна заранее. В оригинале в этих структурах ещё содержится переменная с длиной включённой строки.
А так да. Насколько я понял можно ещё так было бы описать, например:
C#
1
2
[MarshalAs(UnmanagedType.BStr, SizeConst = 5)]
public string Somestring;
0
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
24.03.2015, 17:22 12
Цитата Сообщение от vJRoF Посмотреть сообщение
проблема в том, что длина сишной строки не известна заранее.
Если длина неизвестна заранее, то это указатель. Со всеми вытекающими.
В этом случае достаточно затолкать в структуру ссылку на массив или тот же указатель.
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
24.03.2015, 17:27 13
Цитата Сообщение от kolorotur Посмотреть сообщение
Если длина неизвестна заранее, то это указатель. Со всеми вытекающими.
В этом случае достаточно затолкать в структуру ссылку на массив или тот же указатель.
Тогда же придётся иметь в структуре IntPtr вместо string и маршаллить вручную?
0
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
24.03.2015, 17:33 14
Цитата Сообщение от vJRoF Посмотреть сообщение
Тогда же придётся иметь в структуре IntPtr вместо string и маршаллить вручную?
IntPtr, char*, char[], string, StringBuilder — в зависимости от того, как выглядит сишная структура.
Как именно она выглядит в вашем случае?
0
13 / 13 / 8
Регистрация: 11.10.2013
Сообщений: 102
24.03.2015, 17:40 15
Цитата Сообщение от kolorotur Посмотреть сообщение
Как именно она выглядит в вашем случае?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
typedef struct _STRUCT
{                                        
    S_HANDLE            _field1;
    LARGE_INTEGER       _field2;
    USN             _field3;
    ULONG           _field4;
    ULONG           _field5;
    USHORT          _field6;
    USHORT          FileNameLength;
    ULONGLONG       _field7;
    ULONGLONG       _field8;
    ULONGLONG       _field9;
    WCHAR           FileName[];
} STRUCT, *PSTRUCT;
0
Модератор
Эксперт по электронике
8356 / 6202 / 834
Регистрация: 14.02.2011
Сообщений: 21,552
24.03.2015, 17:43 16
Шарп не допускает провалы в switch
C++
1
2
3
4
5
6
7
8
switch(m)
{
case 0:
    n++;
case 1:
    n++;
case2:
........................
На Си скомпилируется на шарпе нет
0
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
24.03.2015, 18:30 17
vJRoF, если такую структуру надо маршаллить из неуправляемого кода, то объявляйте член как массив и маршальте как ByValArray

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
Шарп не допускает провалы в switch
Провалы можно эмулировать через goto case:
C#
1
2
3
4
5
6
7
8
9
10
switch(m)
{
case 0:
    n++;
    goto case 1;
case 1:
    n++;
    goto case 2;
case2:
........................
В шарпе специально провалы по умолчанию убрали для избежания тупых ошибок. Хочешь проваливаться — указывай явно.
1
540 / 348 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
24.03.2015, 18:44 18
HAIRY, есть совсем очевидная вещь:
- можно написать программу, которая будет работать быстрее

Казалось бы веский аргумент, на писать на шарпе проще. Можно сложить мозг в коробку рядом, и уверенно прогать. Проще писать на шарпе.
0
Эксперт С++
1926 / 1759 / 258
Регистрация: 03.05.2011
Сообщений: 4,019
Записей в блоге: 11
24.03.2015, 19:33 19
Цитата Сообщение от kolorotur Посмотреть сообщение
using же
будете добры перевести
C++
1
2
3
4
5
6
typedef HRESULT(__stdcall* _D3D11CreateDevice)(IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE,
    UINT, const D3D_FEATURE_LEVEL*, UINT, UINT, ID3D11Device**,
    D3D_FEATURE_LEVEL*, ID3D11DeviceContext**);
 
_D3D11CreateDevice D3D11CreateDevice; // готовая функция без использования статической d3d11.lib
                                     // и загружаемая непосредственно из d3d11.dll - LoadLibrary
Цитата Сообщение от kolorotur Посмотреть сообщение
Интероп через DllImport + extern же
ну это понятно, но опять же на плюсах я пишу
C++
1
WriteProcessMemory(hProc, RemoteString, path, strlen(path), NULL);
а сколько кода на шарпе нужно, чтобы записать байты в память процесса?
можно конечно понаделать собственных классов и вызывать WriteProcessMemory точно также одной строкой. Но всё же)
0
Эксперт .NET
14836 / 11224 / 2946
Регистрация: 17.09.2011
Сообщений: 18,794
24.03.2015, 19:42 20
Цитата Сообщение от _lunar_ Посмотреть сообщение
будете добры перевести
Если отбросить всю требуху, то обычный делегат

Цитата Сообщение от _lunar_ Посмотреть сообщение
а сколько кода на шарпе нужно, чтобы записать байты в память процесса?
На сам вызов? Тоже одну строчку.
Ну ладно, строчка будет чуть длиннее, потому что если делать по уму, то метод вызывается через ссылку на статический класс.

Цитата Сообщение от _lunar_ Посмотреть сообщение
можно конечно понаделать собственных классов и вызывать WriteProcessMemory точно также одной строкой.
Ну да, делаем один раз класс со всеми импортами и дальше наслаждаемся

Цитата Сообщение от _lunar_ Посмотреть сообщение
Но всё же
В плюсах тоже инклюды прописывать надо!!!1
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2015, 19:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как сделать, что бы нельзя было изменить выбор в тесте?
begin ball:=0; if RadioGroup1.ItemIndex=0 then image1.Visible:=true; if...

Как сделать что бы нельзя было нажать button1 пока не заполнены 2 textbox
Как сделать что бы нельзя было нажать button1 пока не заполнены 2 textbox Например: textbox1:тут...

Без использования CSS сделать так, что бы картинку нельзя было перетягивать
echo"<center><img src='had.jpg' alt='*'/></center></div>"; Как без использования css (<img style...

Почему эти значение нельзя сравнить, и что нужно сделать, чтобы исправить ошибку?
Помогите исправить ошибку.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.