在VC++下定义:
#define DLLEXPORT extern "C" __declspec(dllexport)
extern "C" __declspec(dllexport) int __stdcall StringTest( wchar_t **& str1,wchar_t ** tr2,int iarray);
DLLEXPORT int __stdcall StringTest( wchar_t **& str1,wchar_t ** str2,int iarray)
{
for (int i=0;i<iarray;i++)
{
wcscat(str1[i],str2[i]);
}
return 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
C#下调用:
//外部dll函数申明
[DllImport("csdll.dll", EntryPoint = "StringTest", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
private static extern int StringTest([MarshalAs(UnmanagedType.LPArray)]ref string[] str1, string[] str2, int iarray);
//主函数调用
string[] sParmIds = new String[4];
string[] sParmValues = new String[4];
sParmIds[0] = "炉膛宽度";
sParmIds[1] = "炉膛高度";
sParmIds[2] = "字符串";
sParmIds[3] = "小数";
sParmValues[0] = "4500";
sParmValues[1] = "3500";
sParmValues[2] = "长江黄河";
sParmValues[3] = "3.6";
StringTest(ref sParmIds, sParmValues,4);//在这一步,报错。其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
for (int i = 0; i < 3; i++)
MessageBox.Show(sParmIds[i]);
//我的意图是,返回的sParmIds数组为:
//sParmIds[0]=="炉膛宽度4500"
//sParmIds[1]== "炉膛高度3500";
//sParmIds[2]== "字符串长江黄河";
//sParmIds[3]== "小数3.6";
请教诸位,此问题如何解决?