Возвращение строк из функций Windows C - PullRequest
2 голосов
/ 22 декабря 2010

Я - новичок в чисто Windows API-функциях уровня C и C ++ и недавно экспериментировал с совместимостью .NET.Я построил простую библиотеку, которая успешно возвращала числовые значения (int / float и т. Д.) Вызывающей стороне .NET, но мне не так повезло со строками.

Я пробовал множество различныхтипы данных, но ни один из них не работает: LPSTR, LPCSTR, LPCTSTR и LPCWSTR.По общему признанию, я не пробовал char *.Кроме того, после настройки метода для возврата строки требуется ли маршалинг с помощью .NET в качестве определенного типа данных или его можно просто прочитать прямо в объект System.String?Я попытался выполнить синтаксический анализ в IntPtr, а затем преобразовать его в строку, но это не сработало.

1 Ответ

7 голосов
/ 22 декабря 2010

Делайте то, что делает Windows API.Обычно он не возвращает указатели, он заполняет буферы, которые вы передаете.

Управляемый код:

[DllImport("YourLibrary", CharSet = CharSet.Auto)] 
static extern Int32  SomeArbitraryFunction (
    String        input,          // string passed to API (LPCSTR) 
    StringBuilder output,         // output filled by API (LPSTR)    
    Int32         outputMaxLen    // StringBuilder.Capacity
); 

На стороне C / C ++:

DWORD WINAPI SomeArbitraryFunction (
    LPCSTR input,
    LPSTR output,
    DWORD outputMaxLen
);
...