为什么我的char *在C# - >之间的截止值为256个字符C ++

时间:2012-01-03 20:48:41

标签: c# c++ marshalling native-code

我必须调用一个使用某些非标准类型的外部库,因此我在这个外部库中创建了一个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个字符。当我在C ++代码中调试/观察xml参数时,我看到它的截止值为256个字符。

现在,我在很长一段时间内没有在.NET中进行任何C ++或本机代码调用,所以我忘记了它的所有细节。我不认为这是Marshal.StringTo ...调用的问题,因为它似乎返回一个完全呈现的char *。它似乎是运行时尝试传递参数的时候。

更新

根据请求,这是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);

}

非常感谢任何帮助!

由于

0 个答案:

没有答案