Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
1

С С++ на C#

09.08.2011, 17:38. Показов 872. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята я начинающий в этом деле, у меня вопрос, я столкнулся с тем что мне надо переписать с С++ приложение на С#, но вот в чём проблема я вообще не понимаю как переписать, проблема состоит в том что в С++ есть header файлы, тоесть например Program.cpp (основной) в инклюде подключён Program.h, как их переписать ?? их что совмещать в один файл ?

П.С. не судите строго я только пробую... выслушаю все предложения, заранее спасибо
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.08.2011, 17:49 2
Да совмещать в один. Я например когда начал читать по С++ книгу и попробовал создать свой класс не дойдя до этой темы был удивлён разделению на 2 файла. Ну или просто разделению на описание класса и его реализацию.

Добавлено через 52 секунды
Вот выложи сюда какой-нибудь простой класс (ну не прям очень простой, просто чтобы писанины меньше было) я покажу как переделать.

Добавлено через 4 минуты
Будешь выкладывать, сделай минимальные хотябы комменты (я про сложные места, если такие будут, где как тебе кажется может быть не понятно плохо знакомому с С++, что там происходит), я в С++ пока не супер шарю, вообще в нём новичок, но думаю переделать класс смогу.
0
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
09.08.2011, 17:50  [ТС] 3
Ага, а тогда как поступать если например 1 *.h подключаеться в 2 файлах *.cpp ну или наоборот поскольку я только что такое нашел)))

это header:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef _WINDOWS_
    #include <windows.h>
#endif
 
#ifndef _FSTREAM_
    #include <fstream>
    static std::ofstream file("L2EP[Elhaym].log", std::ios::out);
    static std::ofstream fileEs("L2EP[Elhaym]smeli.log", std::ios::out);
    static std::ofstream fileRecipes("../script/recipe.txt", std::ios::in);
#endif
 
//DLL Main
__declspec( dllexport ) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved);
 
 
void pachches();
а это к нему cpp:
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
35
#include "L2ExtensionProject.h"
#include "memoryFuncs.h"
#ifndef _WINDOWS_
    #include <Windows.h>
#endif
 
__declspec( dllexport ) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) 
{
 
 
    //our DLL state switch
    switch( fdwReason )
    {
        case DLL_PROCESS_ATTACH:
        {
 
            pachches(); //install our exe file patches (patches CPP)
 
            break;
        }
        case DLL_THREAD_ATTACH:
            break;       
        case DLL_THREAD_DETACH:
            break;
        case DLL_PROCESS_DETACH:
 
 
            //Destroy our Critical Section
            //DeleteCriticalSection(&cs);
 
 
            break;   
    }  
    return TRUE; 
}
C++
1
__declspec( dllexport ) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
эту строчку я сам никак разобрать не могу, это что-то импортирует из внешней дд и в fdwReason заносит результат что сейчас с ней проиходит... я так понял))))
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.08.2011, 17:57 4
В С# не нужно подключать заголовочные файлы. Просто пишешь классы и всё. Главное чтобы сверху были подключены простраства имён в которых находятся эти классы, ну или из кода можно обращаться через полное имя класс (с пространством имён).

Когда я говорил выложи класс, я имел ввиду, что ты напишешь класс на С++, я покажу аналог на C#, а с WInAPI как тут быть, на первый взгляд сложно сказать. Вообще для чего класс? Может его вообще можно заменить чем-то?

Добавлено через 3 минуты
Ну вот пример с импортом WinAPI:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.IO;
using System.Net;
using System.Runtime.InteropServices; //Для импорта WinAPI. Короче для атрибута [DllImport("имя_библиотеки.dll")]
 
namespace Web
{
    public static class Internet
    {
        [DllImport("wininet.dll")]
        static extern bool InternetGetConnectedState(ref InternetConnectionState lpdwFlags, int dwReserved);
 
        [Flags]
        enum InternetConnectionState : int
        {
            INTERNET_CONNECTION_MODEM = 0x1,
            INTERNET_CONNECTION_LAN = 0x2,
            INTERNET_CONNECTION_PROXY = 0x4,
            INTERNET_RAS_INSTALLED = 0x10,
            INTERNET_CONNECTION_OFFLINE = 0x20,
            INTERNET_CONNECTION_CONFIGURED = 0x40
        }
 
        /// <summary>
        /// Проверить, есть ли соединение с интернетом
        /// </summary>
        /// <returns></returns>
        public static Boolean CheckConnection()
        {
            InternetConnectionState flags = InternetConnectionState.INTERNET_CONNECTION_CONFIGURED | 0;
 
            bool checkStatus = InternetGetConnectedState(ref flags, 0);
 
            if (checkStatus)
                return TestConnectionToServer(@"http://www.google.com/");
 
            return checkStatus;
        }
 
        public static Boolean TestConnectionToServer(string address)
        {
            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(address);
                int timeout = req.Timeout;
                WebResponse resp = req.GetResponse();
                resp.Close();
                return true;
            }
            catch (WebException)
            {
                return false;
            }
        }
    }
}
1
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
09.08.2011, 18:00  [ТС] 5
Это вообще dll взятая с сервера авторизации, написаный на *.cpp
надо переписать на C# и что делать ума не приложу с этими *.h файлам...
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.08.2011, 18:04 6
Цитата Сообщение от IceSqueez Посмотреть сообщение
Это вообще dll взятая с сервера авторизации
А может надо написать на C# для неё обёртку?
Например как для bass.dll написана Bass.NET.dll и т.д. Или нужно полностью на C#?
0
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
09.08.2011, 18:05  [ТС] 7
Цитата Сообщение от Casper-SC Посмотреть сообщение
А может надо написать на C# для неё обёртку? Например как для bass.dll написана Bass.NET.dll и т.д. Или нужно полностью на C#?
ем.. а по подробнее ?)))
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.08.2011, 18:08 8
Ну я так понимаю нужно вызывать какие-то функции в С++ библиотеке из C# приложения?

Добавлено через 59 секунд
Находил статью интересную, не знаю в тему ли, но вдруг пригодится >>> Интеграция Native кода в C# проект <<<
1
Java, C# - Expert
69 / 69 / 12
Регистрация: 09.08.2011
Сообщений: 284
09.08.2011, 18:12  [ТС] 9
Нет, это полностью сервер игры будет написан на С#...
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
10.08.2011, 01:43 10
Цитата Сообщение от IceSqueez Посмотреть сообщение
С#, но вот в чём проблема я вообще не понимаю как переписать, проблема состоит в том что в С++ есть header файлы, тоесть например Program.cpp (основной) в инклюде подключён Program.h, как их переписать ?? их что совмещать в один файл ?
в С# и Java принято придерживаться правила - "один класс - один файл"
0
10.08.2011, 01:43
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru