Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с DLL / 5 сообщений из 5, страница 1 из 1
18.12.2004, 17:29
    #32833471
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с DLL
Есть некая GetId.dll, в ней есть функция
int getId(char *buf)
Как ее использовать и что надо посылать в параметрах?

Код: plaintext
1.
[DllImport("GetId.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
static extern int getId(ref char[] c_ID); 
Не работает..
Что не так творю?
...
Рейтинг: 0 / 0
18.12.2004, 18:13
    #32833484
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с DLL
я может ошибаюсь, но что-то мне не нравится описание параметров. В длл описан указатель на чар а в c# параметр - массив чар по ссылке....
но возможно я ошибаюсь..
...
Рейтинг: 0 / 0
18.12.2004, 18:23
    #32833488
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с DLL
А точнее?
Т.е. как по ссылке?
Открывать не безопасный код с указателями или как?
...
Рейтинг: 0 / 0
18.12.2004, 18:26
    #32833489
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с DLL
нет, с по ссылке все нормально, у тебя же в длл описан указатель, а в c# что бтак передать нужно ставить byref(по ссылке)..и никаких небезопасных кодов не надо, просто попробуй объявить "ref char c_ID"
...
Рейтинг: 0 / 0
19.12.2004, 02:29
    #32833621
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с DLL
если в п/программу передается ссылка на буфер, в котором будет возвращаться строковое значение, то, обычно, используют StringBuilder

как пример, для API функции
Код: plaintext
BOOL GetUserName(LPTSTR lpBuffer, LPDWORD nSize);
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
[DllImport("Advapi32.dll", CharSet=CharSet.Ansi)]
static extern bool GetUserName(StringBuilder lpBuffer, ref uint nSize);
...
StringBuilder sb=new StringBuilder(1024);
uint          sz=(uint)sb.Capacity;
		
GetUserName(sb, ref sz);
Console.WriteLine("{0} {1}", sb.ToString(), sz);
---
ЗЫ cdecl - это точно ?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа с DLL / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]