Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

string в char*

2.4K
03 мая 2006 года
Lenin
51 / / 05.12.2004
Нужно передать в дллку написаную на С указатель на строку.
Пишу на С# так:
 
Код:
public class Import
    {
        [DllImport("PopUpStopper.dll")]
        public static extern unsafe void
GetNamesList(char* nW);
    }

И вызов :
 
Код:
unsafe
{
MessageBox.Show(richTextBox1.Text);
                    Import.GetNamesList(richTextBox1.Text.ToCharArray());
}


Вот функция которой это все передается:
 
Код:
DLL void GetNamesList(char* nW)
{
    Holder=dg_malloc(lstrlen(nW)+1);
    lstrcpy(Holder,nW);
    MessageBox(NULL,Holder,"Dll test",NULL);
}


После всех этих манипуляций появляется пустой MessageBox
Перепробовал кучю методов но ничего не помогает.
Это вообще возможно на C#.
Я в нем чайник.Только позавчера учить начал, прельстивщись простотой создания интерфейса.
273
03 мая 2006 года
3A3-968M
1.2K / / 22.12.2005
Попробуй через маршаллинг:
[DllImport("PopUpStopper.dll")]
public static extern unsafe void
GetNamesList([MarshalAs(UnmanagedType.LPStr)] char[] nW);
А вот в dll-ке оучше бы так написал:
DLL void GetNamesList(lpStr nW)
{
Holder=dg_malloc(lstrlen(nW)+1);
lstrcpy(Holder,nW);
MessageBox(NULL,Holder,"Dll test",NULL);
}
Можешь попробовать различные манипуляции с маршаллингом. И обрати внимание, что тип аргумента в импортируемой функции не char*, а char[], ведь в .NET нет указателей, а есть ссылки.
2.4K
03 мая 2006 года
Lenin
51 / / 05.12.2004
Цитата:
Originally posted by 3A3-968M
Попробуй через маршаллинг:
[DllImport("PopUpStopper.dll")]
public static extern unsafe void
GetNamesList([MarshalAs(UnmanagedType.LPStr)] char[] nW);
А вот в dll-ке оучше бы так написал:
DLL void GetNamesList(lpStr nW)
{
Holder=dg_malloc(lstrlen(nW)+1);
lstrcpy(Holder,nW);
MessageBox(NULL,Holder,"Dll test",NULL);
}
Можешь попробовать различные манипуляции с маршаллингом. И обрати внимание, что тип аргумента в импортируемой функции не char*, а char[], ведь в .NET нет указателей, а есть ссылки.



Спасибо огромное помогло.

Хотя нет не помогло выдает вот что:
System.Runtime.InteropServices.MarshalDirectiveException: Невозможно упаковать "parameter #1": Недопустимое сочетание управляемого и неуправляемого типов (массивы можно упаковывать только как LPArray, ByValArray или SafeArray).

273
04 мая 2006 года
3A3-968M
1.2K / / 22.12.2005
Хм, странно...
Ну тогда так:
public static extern unsafe void
GetNamesList(char[] nW);
или так:
public static extern unsafe void
GetNamesList([MarshlAs(UnmanagedType.LPStr)] string nW);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог