Передать строку из C # в C DLL - PullRequest
6 голосов
/ 17 января 2012

Я пытаюсь передать строку из C # в C DLL.Из того, что я прочитал, .NET должен сделать преобразование из строки в char * для меня, однако я получаю «ошибку CS1503: Аргумент« 1 »: невозможно преобразовать из« string »в« char * »» Может кто-нибудь посоветовать мне, где япошло не так?Спасибо.

C # код

[DllImport("Source.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
public static unsafe extern bool StreamReceiveInitialise(char* filepath);

const string test = "test";
// This method that will be called when the thread is started
public void Stream()
{
    if (StreamReceiveInitialise(test))
    {


    }
}

C DLL

extern "C"
{
    __declspec(dllexport) bool __cdecl StreamReceiveInitialise(char* filepath);
}

Ответы [ 3 ]

3 голосов
/ 17 января 2012

Объявите ваш внешний метод как:

public static extern bool StreamReceiveInitialise(string filepath);
1 голос
/ 17 января 2012

Используйте StringBuilder вместо char *.Смотри это

[DllImport("Source.dll")]
public static extern bool StreamReceiveInitialise(StringBuilder filepath);
1 голос
/ 17 января 2012

Сделайте это так:

[DllImport("Source.dll", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.ANSI)]
static extern bool StreamReceiveInitialise([MarshalAs(UnmanagedType.LPStr)] string filepath);

(Маршаллинг как UnmanagedType.LPStr используется по умолчанию, но мне нравится быть явным).

...