3 / 3 / 1
Регистрация: 16.02.2011
Сообщений: 157
|
||||||||||||||||
1 | ||||||||||||||||
Как при использовании DllImport передать строку08.12.2016, 14:01. Показов 2600. Ответов 6
Доброго времени суток. Пытаюсь использовать libshout.dll. При указании параметров методу возникает ошибка. Неправильно работаю со строками. Как передать string в метод который принимает char *
0
|
08.12.2016, 14:01 | |
Ответы с готовыми решениями:
6
Как правильно передать объект в функцию при использовании многопоточности Как перенести строку при записи в файл при использовании BufferedWriter? Django 1.10. Как передать в context шаблона номер страницы пагинации при использовании Class Based Views ? Как при загрузке формы, передать последнюю строку из таблицы (DBgrid) в тескстовое поле (text1)? |
Администратор
|
|
08.12.2016, 14:23 | 2 |
Serpico, строка передается правильно. Единственное стоит уточнить кодировку. Под char обычно скрывается однобайтовые кодировки. Unicode-у соответствуют wchar, wchar_t, LPCWSTR и т.п. Ошибку вижу только в передаче указателя в первом аргументе. Для этого нужно использовать тип IntPtr, ссылочный тип или структуру с ref/out модификатором. Ошибка на которую ты сослался (но забыл привести) наверное вызвана этим.
0
|
3 / 3 / 1
Регистрация: 16.02.2011
Сообщений: 157
|
|||||||||||
08.12.2016, 14:33 [ТС] | 3 | ||||||||||
OwenGlendower, Не получилось. Вот что я сделал:
Возможно надо передать как-то так :
0
|
Администратор
|
|||||||||||
08.12.2016, 15:08 | 4 | ||||||||||
Сообщение было отмечено Serpico как решение
Решение
Serpico, ты меня неправильно понял. Речь о первом аргументе метода shout_set_host который в C имеет тип shout_t *, а в C# почему-то объявлен как long. Это верно только если оба приложения откомпилированы под x64. Под x86 указатель будет занимать 4 байта и соответственно нужен тип int. Чтобы не было проблем связанных с разными платформами нужно использовать тип IntPtr.
Что касается строки и её кодировки. Передавай как string и укажи для неё ANSI кодировку
1
|
3 / 3 / 1
Регистрация: 16.02.2011
Сообщений: 157
|
||||||
08.12.2016, 16:17 [ТС] | 5 | |||||
OwenGlendower, Удивительно но это помогло.
Но как же так? Когда я использовал shout_set_port то всё было нормально.
0
|
Администратор
|
|
08.12.2016, 16:37 | 6 |
Если ты о декларации на стороне C, то не забывай что размерность численных типов отличается в разных языках. long в C может соответствовать int или long в C#.
0
|
3 / 3 / 1
Регистрация: 16.02.2011
Сообщений: 157
|
|
08.12.2016, 16:39 [ТС] | 7 |
OwenGlendower, возможно чуть позже я разберусь с этим более углубленно. Спасибо за помощь!
0
|
08.12.2016, 16:39 | |
08.12.2016, 16:39 | |
Помогаю со студенческими работами здесь
7
Как передать строку из слов и пробелов через командную строку? при использовании шаблона '<b>.*</b>' он находит ВСЮ строку (то есть ищет не ближайший </b> а с конца!!!) Как передать строку в строку адрееса IE Синтаксическая ошибка при создании библиотеки: __declspec(dllimport) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |