Почему мой символ * обрезается на 256 символов между C # -> C ++ - PullRequest
1 голос
/ 04 января 2012

Мне нужно вызвать внешнюю библиотеку, которая использует некоторые нестандартные типы, поэтому я создал оболочку C ++ вокруг этой внешней библиотеки. Чтобы попытаться избавить от боли, я настроил аргументы как wchar_t *:

void StartBatchJob(wchar_t* server, unsigned short port, int timeout, wchar_t* xml, int length);

Когда я вызываю функцию:

var xml = new StringBuilder("... xml string removed for brevity");
StartBatchJob(((Char*)hostCharPointer), 6015, 60000, ((Char*)Marshal.StringToHGlobalUni(xml.ToString())), xml.ToString().Length);

Однако, когда функция вызывается, она выглядит обрезанной на 256 символов. Когда я отлаживаю / наблюдаю параметр xml в коде C ++, я вижу его обрезку в 256 символов.

Теперь, я не делал C ++ или нативный код, вызывающий в .NET очень долгое время, поэтому я забыл все детали этого. Я не думаю, что это проблема с вызовом Marshal.StringTo ..., поскольку он возвращает полностью обработанный символ *. Похоже, это когда среда выполнения пытается передать аргументы.

Обновление:

По запросу, вот реализация метода StartBatchJob:

extern "C" ZCHAR * JDEWINAPI jdeXMLRequest(const JCHAR *szHostName, unsigned short usPort, const int nNetTimeout, void *xml, int size);

void JDEService::StartBatchJob(wchar_t* server, unsigned short port, int timeout, wchar_t* xml, int length)
{
    ZCHAR* presp = jdeXMLRequest(reinterpret_cast<JCHAR *>(server), port, timeout, xml, length);

}

Любая помощь очень ценится!

Спасибо

...