Как передать "значения" между C # и C ++ dll - PullRequest
1 голос
/ 08 июля 2011

У меня есть проект DLL с C ++, например:

_declspec(dllexport) bool __stdcall cppPage1(char* Input, char* Output)
{
    string str1 = Input;
    //blablabla
    strcat(Output, "Result#as#a#string");
}

И в C # я использую это с:

[DllImport("ReportContent.dll")]
extern static bool cppPage1()
public void Page1()
{
    StringBuilder s1 = new StringBuilder("1#3", 10000);
    StringBuilder s2 = new StringBuilder("", 10000);
    cppPage1(s1, s2);
}

Как показано выше, я "получаю" некоторую оперативную память сStringBuilder где C # и C ++ оба могут читать / писать.C ++ считывал Input из ОЗУ, вычислял логику и записывал в Output, который также находится в ОЗУ, чтобы C # мог получить результат.Позвольте StringBuilder.Length = 10000 убедиться в том, что этого достаточно в большинстве ситуаций.

Я не думаю, что это хорошая практика, чтобы рассмотреть ОЗУ в C #.Как правильно общаться между C # и C ++?

1 Ответ

3 голосов
/ 08 июля 2011

Вы должны перевести подпись с C на C #, используя правила маршалинга P / Invoke.Есть несколько инструментов, которые помогут вам в этом.

Вот документация

...