Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
1

Передача char* в C++ функцию

22.07.2013, 18:00. Показов 2536. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть функция из C++ dll, в ней один из входных параметров const char*. В каком виде этот char* передавать?

Добавлено через 2 минуты
http://stackoverflow.com/quest... om-c-sharp так?

Добавлено через 1 час 7 минут
И ещё похожий вопрос...
C++
1
EXPORTDLL unsigned int func(uint64 ID, uint64** result);
Чем uint64** ловить в C#?(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.07.2013, 18:00
Ответы с готовыми решениями:

Передача в функцию двухмерного массива char
public void FindSentense(char arrays,int size,char sentenses){ int j =0; ...

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Почему компилятор на это матерится? ObjA.Show("A"); deprecated conversion from string constant...

Передача в функцию char**
Здравствуйте! Подскажите как передавать в функцию void переменную char**, а то ошибку пишет что...

Передача char в функцию
Привет всем! Помогите, что неправильно: есть функция void send_new_object(char *g, char *h, int...

9
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
22.07.2013, 18:20 2
По const char* решение есть тут http://www.codeproject.com/Que... -char-to-c
Насчет uint64, попробуйте использовать UInt64, может получиться.
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
22.07.2013, 18:21  [ТС] 3
Vlad_IT, получится то получается, только вот как из uint64 получить потом массив я немного недопонимаю. много недопонимаю...
0
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
23.07.2013, 20:06 4
phantom96, что возвращает функция? result, я так понимаю, выходной массив?
Память выделяется в func? А как освобождается?

Добавлено через 18 минут
Если я правильно понял, то можно как-то так:
C#
1
2
[DllImport("your_dll.dll", EntryPoint = "func")]
static extern uint func(ulong ID, out IntPtr result);
class ts3client
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
class ts3client
{
    public const uint ERROR_ok = 0x00000000;
 
    [DllImport("ts3client.dll", EntryPoint = "ts3client_getChannelList")]
    private static extern uint ts3client_getChannelList(ulong serverConnectionHandlerID, out IntPtr result);
 
    public static uint getChannelList(ulong serverConnectionHandlerID, out ulong[] result)
    {
        result = null;
        IntPtr ptr;
        uint status = ts3client_getChannelList(serverConnectionHandlerID, out ptr);
        if (status == ERROR_ok)
        {
            // Если элементов бывает больше, то можно зарезервировать больше места.
            List<ulong> list = new List<ulong>(10);
            int offset = 0;
            do
            {
                // Извлекаем элементы из неуправляемого массива в управляемый контейнер.
                list.Add(unchecked((ulong)Marshal.ReadInt64(ptr, offset)));
                offset += Marshal.SizeOf(typeof(ulong));
            }
            // Условие выхода - встретили завершающий нуль.
            while (list.Last() != 0);
            // Удаляем завершающий нуль.
            list.Remove(list.Last());
            if (list.Count != 0) // может такое быть?
                result = list.ToArray();
        }
        return status;
    }
}

Не забудьте про освобождение памяти.
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
23.07.2013, 20:44  [ТС] 5
Освобождение памяти это IntPtr ptr?
C#
1
2
           if (list.Count != 0) // может такое быть?
                result = list.ToArray();
Нет, хотя бы 1 дефолтный канал на сервере есть всегда.
0
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
23.07.2013, 20:58 6
Цитата Сообщение от phantom96 Посмотреть сообщение
Освобождение памяти это IntPtr ptr?
Ну, да. Только я не знаю в какой момент можно освобождать память. Может сразу, как скопировали, может - нет. Смотрите документацию.

Добавлено через 3 минуты

Не по теме:

А что готового порта на С# нет что ли?

0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
23.07.2013, 21:04  [ТС] 7
Цитата Сообщение от nxtech Посмотреть сообщение
Ну, да. Только я не знаю в какой момент можно освобождать память. Может сразу, как скопировали, может - нет. Смотрите документацию.

Добавлено через 3 минуты

Не по теме:

А что готового порта на С# нет что ли?

Освобождать можно сразу. Он только для вывода этот result использует...

Не по теме:

На счёт порта... Незнаю... Для mumbl'а искал, а для тс что-то не додумался. Ну даже если нету там не так много работы) ещё штук 10-20 функций вытащить из дллки да и всё)



Добавлено через 2 минуты

Не по теме:

Видимо готового порта таки нету(

0
78 / 60 / 9
Регистрация: 26.06.2013
Сообщений: 198
23.07.2013, 21:10 8
Ну, тогда сразу же и освобождать ее
C#
1
2
[DllImport("ts3client.dll", EntryPoint = "ts3client_freeMemory")]
public static extern uint ts3client_freeMemory(IntPtr ptr);
Добавлено через 1 минуту

Не по теме:

Ну, хоть что-то работает?



Добавлено через 2 минуты
Да вот вроде есть что-то http://st0rmts3.googlecode.com... c/4/trunk/
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
23.07.2013, 21:28  [ТС] 9
В примерах sdk для C# есть клиент и сервер. Говорить по крайней мере они могут, enum'ы там на первый взгляд все или почти все прописаны. Всё не так уж и печально)
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
24.07.2013, 02:08 10
char* передавать нужно примерно так
C#
1
2
[DllImport("my.dll", EntryPoint="myFunction", CharSet = CharSet.Ansi)]
public extern static void CppFunction([MarshalAs(UnmanagedType.LPStr)] string s);
0
24.07.2013, 02:08
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2013, 02:08
Помогаю со студенческими работами здесь

Передача массива char в функцию
Пишу такой код //--------------------------------------------------------------------------- ...

Передача массива char в функцию
Ув. программисты, Ниже прикрепляю фукнцию, которая считывает число в двоичной системе и записывает...

Передача символа char в функцию
Господа, добрый день. Вопрос у меня очень простой, я бы сказал элементарный. Но в связи с запором...

Передача в функцию массива char
Есть функция : char f1(const char *str); Мне нужно её вызвать . Делаю так: char s; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru