Передача указателя char из С# в функцию С++

Я застрял на стороне реализации С#, так как я новичок в этом. Дело в том, что я хочу передать «указатель» (имеющий память) из кода С#, чтобы мое приложение С++ могло копировать буфер pchListSoftwares в pchInstalledSoftwares. Я не могу понять, как передать указатель со стороны С#.

собственный код С++ (MyNativeC++DLL.dll)

void GetInstalledSoftwares(char* pchInstalledSoftwares){
    char* pchListSoftwares = NULL; 
    .....
    .....
    pchListSoftwares = (char*) malloc(255);

    /* code to fill pchListSoftwares buffer*/

    memcpy(pchInstalledSoftwares, pchListSoftwares, 255);

    free(pchListSoftwares );

}

Передача простой "строки" не работает...

Реализация С#

[DllImport("MyNativeC++DLL.dll")]
private static extern int GetInstalledSoftwares(string pchInstalledSoftwares);


static void Main(string[] args)
{
.........
.........
        string b = "";
        GetInstalledSoftwares(0, b);
        MessageBox.Show(b.ToString());
}

Любая помощь приветствуется...


person Supernova009    schedule 08.12.2010    source источник


Ответы (3)


Попробуйте использовать StringBuilder

[DllImport("MyNativeC++DLL.dll")]
private static extern int GetInstalledSoftwares(StringBuilder pchInstalledSoftwares);


static void Main(string[] args)
{
.........
.........
        StringBuilder b = new StringBuilder(255);
        GetInstalledSoftwares(0, b);
        MessageBox.Show(b.ToString());
}
person William Mariager    schedule 08.12.2010

Моя ошибка... удалить 0 в вызове GetInstalledSoftwares(0, b);.

person Supernova009    schedule 08.12.2010

Попробуйте изменить строку прототипа на:

private static extern int GetInstalledSoftwares(ref string pchInstalledSoftwares); 

(Отправить строку по ссылке).

person rkellerm    schedule 08.12.2010