Мне необходимо передавать строку (символы). Так как IntPrt - число, то не могу это использовать. Я правильно понял?
Если нужно выделять память в C# (через Marshal.AllocHGlobal) и использовать в C++, то должно быть так:
public static extern void TestString(string str1, string str2);
Иначе передать не получится (в release память очистится). Так?
string С# принять char* в C++? Т.е.:
void __stdcall TestString(char* str1, char* str2)
Можно, для получения результата, выделить третий параметр, а можно воспользоваться одним из имеющихся. Но как вернуть IntPrt имея char*? Или я совсем все не правильно понимаю?
char* - указатель на char. Подойдет ли он для IntPrt?
Чтобы было понятно, чего хочу добиться, решил показать неработающий пример. В сишном коде хочу модифицировать строку перед возвращением (например, соединить). Сейчас он не компилится. Пробовал просто вернуть str1 (return str1). В этом случае падает на последней строке C#-кода: sbb = TestString(sb1, sb2);
Текст ошибки: A call to PInvoke function 'ProjectTestDll!ProjectTestDll.Form1::TestString' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
Подскажите куда копать. Думаю, эту задачу можно разбить на несколько мелких вопросов. Ответ мне понравился. Наверное, его можно считать решением. Но я не могу сказать, что он меня удовлетворил и я нашел, что искал. Очень надеюсь на помощь.