怎么没人帮我呀。有没有人用过DLL呀

解决方案 »

  1.   

    http://dev.csdn.net/develop/article/44/44592.shtm看一下吧
    很具体了的。
      

  2.   

    // 申明块
    [StructLayout(LayoutKind.Sequential,Pack=1)]
    public struct DeliverResp 

     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=11)]
     public string SmsgID; 
     public int NmsgFormat; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=22)]
     public string SsrcTermID; public int NisReport;
     public int NmsgLen;
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=201)]
     public string sMsgContent;
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=21)]
     public string sDestTermID;
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst=15)]
     public string sRecvTime; 
    }
    // 申明
    [DllImport("SmgpDll.dll")]
    public static extern int SMGPDeliver(int nTimeout,ref DeliverResp pDeliverResp);// 调用
    DeliverResp dr = new DeliverResp();
    int i = SMGPDeliver( 5000,ref dr );
    结果编译通过了。但运行时没有返回数据。
      

  3.   

    先添加一个对dll的引用,然后在程序中调用
      

  4.   

    我的返回是指dr这个块返回的内容。他没人读回数据。郁闷呀。而i也是返回一个0表示失败。。
      

  5.   

    [DllImport("SmgpDll.dll")]
    public static extern int SMGPDeliver(int nTimeout,ref DeliverResp pDeliverResp);
    这样子就是对DLL的引用呀。
      

  6.   

    这个很难查的,那个Dll是你自己编的吗?也可能是那个里面的问题
      

  7.   

    不是。是别人写的。不过他在VC中调用没问题呀。一个短信收发的API。还有说明,还有一个VC的例子。。我现在要用C#调用。
      

  8.   

    你用String代替char数组肯定不行,因为在C++k中的char数组是实在的内存空间,而C#String定义的是变量是一个地址.
      因为在C/C++中数组的概念与C#中不一样,所以……
      但我现在也没有想到你这个问题和解决办法!
      

  9.   

    c标准中数组实际上是一个指针,char[]的数组里面的每个char(字符)应该是一个byte的空间
    你用string 肯定会出问题的unicode编码的,16or32一个字符。你应该用byte[],or sbyte[],如果不行就用指针,C#同样有指针的。