Передача указателя на символ из C # в функцию c ++ - PullRequest
3 голосов
/ 08 декабря 2010

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

собственный код C ++ (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 );

}

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

C # реализация

[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());
}

Любая помощь очень ценится ...

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

Попробуйте использовать 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());
}
1 голос
/ 08 декабря 2010

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

0 голосов
/ 08 декабря 2010

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

private static extern int GetInstalledSoftwares(ref string pchInstalledSoftwares); 

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

...