C#调用DLL 很奇怪。
在windows 下的情况:
//这是自己写的DLL:Dll9.dll
typedef struct con
{
int rss;
char*mac;
}CON;
_declspec(dllexport) void Pro(CON*pt,int size)
{
for(int i=0;i<size;i++)
{
(pt+i)->mac="hello";
(pt+i)->rss=i;
}
return;
}
在c#中调用该DLL:
namespace Dll9test
{
public partial class Form1 : Form
{
public struct con
{
int rss;
String mac;
}
[DllImport("Dll9.dll")]
public static extern void Pro([In, Out]con[] pt, int size);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con[] pt = new con[5];
Pro(pt,5);
MessageBox.Show("dddd");
}
}
}
这个可以成功调用。但是相同的代码复制,做了个智能设备MFC 的dll,再在wince5.0下相同的c#代码,却出现了错误:未处理的“System.OutOfMemoryException”类型的异常出现在 smart_device.exe 中。这是为什么?望大家指点。
[解决办法]
LZ,是不是这段代码出现的错误:
con[]?pt?=?new?con[5];
????????????Pro(pt,5);
????????????MessageBox.Show("dddd");
如果是,判断一下午 Pro 函数是不是未正确导入?
最后能定位一下是哪句出现的错误,这样好分析一些。由于 WinCE 没有当前工作目录的概念,不知道的 [DllImport("Dll9.dll")] 是否能正确的导入,这个 LZ 自己做实验测试吧。
[解决办法]
建议你对char*mac;做初始化。或者改用数组,然后在dll中用strcpy