当前位置: 代码迷 >> WinCE >> C#调用DLL 很奇怪。该如何解决
  详细解决方案

C#调用DLL 很奇怪。该如何解决

热度:16   发布时间:2016-04-28 12:12:35.0
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
  相关解决方案