C で記述された DLL があります。この DLL には次のような関数があります。
unsigned char DLL_EXPORT getTRK(char *XML, unsigned long *Len)
{
MessageBox(NULL, XML, "Dll message", MB_OK);
char s[] = "Some string";
XML = s;
return rand()%2;
}
dll で XML 変数の値を変更し、この値を C# プログラムに取り込む必要があります。C# に次のコードがあります。
[DllImport("Some_DLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern byte getTRK(string XML, uint Len);
...
string xml = "123";
uint len = 0;
tbXml.Clear();
if (getTRK(xml, len) == 0)
{
tbXml.AppendText(xml);
}
else
{
tbXml.AppendText("Some error!");
}
私はそれを行うためにさまざまな方法を試しましたが、必要に応じて何も機能しません。xml 変数 = "Some string" の c# prog 値を取得したいと考えています。どうすれば入手できますか?次のように ref または out を使用している場合:
[DllImport("Some_DLL.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern byte getTRK(ref string XML, ref uint Len);
...
string xml = "123";
uint len = 0;
tbXml.Clear();
if (getTRK(ref xml, ref len) == 0)
{
tbXml.AppendText(xml);
}
else
{
tbXml.AppendText("Some error!");
}
dll は、「123」ではなく、いくつかのガベージ値を取得します。私がこのようにしている場合:
*XML = *s;
こちらも何も起こりません。