1

非標準型を使用する外部ライブラリを呼び出す必要があるため、この外部ライブラリの 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++ またはネイティブ コードの呼び出しを行っていないため、その詳細をすべて忘れてしまいました。完全にレンダリングされた char* を返すように見えるので、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);

}

どんな助けでも大歓迎です!

ありがとう

4

0 に答える 0