Имея свой собственный код Java, я использую C # для вызова некоторого неуправляемого кода, который вызывает (через JNI) код Java. Я использую JNI, так как мне нужно убедиться:
- возможность того, что код Java будет работать на реальной JVM, а не на некоторых .NET VM
- возможность подключения к ВМ для отладки (IKVM не поддерживает)
- Мне нужно бесплатное решение
- Текущие бесплатные решения не применимы (например, IKVM)
В любом случае, мой вопрос заключается в том, как наилучшим образом управлять строками, передаваемыми между этими слоями, без утечек.
Я делаю что-то вроде:
[DllImport(@"MyDll.dll")]
public extern static void receive_message(string receDest, StringBuilder response);
Это означает, что я выделяю память для ответа в управляемом коде.
Я хочу этого избежать, так как заранее не знаю длины ответа. Как я могу написать соответствующий метод JNI, который будет выделять правильный буфер для управляемого кода без утечек. Код JNI должен быть потокобезопасным.
Есть предложения?
Спасибо
Guy