我调用为: public short AcctID; public void CallDLL(string acc_nbr)
{
AcctID=getAcctIDByNum(acc_nbr, ppc, zhID);
}

解决方案 »

  1.   

    麻烦楼主能否说详细一些?我没有用过非托管和unsafe能否举例说明
      

  2.   

    项目-》属性-》生成-》允许不安全代码  点上
    class TestCopy
    {
        // The unsafe keyword allows pointers to be used within the following method:
        static unsafe void Copy(byte[] src, int srcIndex, byte[] dst, int dstIndex, int count)
        {
            if (src == null || srcIndex < 0 ||
                dst == null || dstIndex < 0 || count < 0)
            {
                throw new System.ArgumentException();
            }        int srcLen = src.Length;
            int dstLen = dst.Length;
            if (srcLen - srcIndex < count || dstLen - dstIndex < count)
            {
                throw new System.ArgumentException();
            }        // The following fixed statement pins the location of the src and dst objects
            // in memory so that they will not be moved by garbage collection.
            fixed (byte* pSrc = src, pDst = dst)
            {
                byte* ps = pSrc;
                byte* pd = pDst;            // Loop over the count in blocks of 4 bytes, copying an integer (4 bytes) at a time:
                for (int i = 0 ; i < count / 4 ; i++)
                {
                    *((int*)pd) = *((int*)ps);
                    pd += 4;
                    ps += 4;
                }            // Complete the copy by moving any bytes that weren't moved in blocks of 4:
                for (int i = 0; i < count % 4 ; i++)
                {
                    *pd = *ps;
                    pd++;
                    ps++;
                }
            }
        }    static void Main()
        {
            byte[] a = new byte[100];
            byte[] b = new byte[100];        for (int i = 0; i < 100; ++i)
            {
                a[i] = (byte)i;
            }        Copy(a, 0, b, 0, 100);
            System.Console.WriteLine("The first 10 elements are:");        for (int i = 0; i < 10; ++i) 
            {
                System.Console.Write(b[i] + " ");
            }
            System.Console.WriteLine("\n");
        }
    }来自MSDN
      

  3.   

    还是没有搞懂? char **& 类型在c#中对应什么类型,而且是输出参数
      

  4.   

    我尝试用了string  StringBuilder都不行
      

  5.   

    用一个struct把参数装起来,然后传struct的地址,应该清澈一点,里面的参数就不用*,**了
      

  6.   

    char **&ppcZHMSG
    为什么要用这么BT的定义呢....
    先问清楚下在C++中 char **&ppcZHMSG 是不是等价于 char *ppcZHMSG ?
    如果是
    [DllImport("VCDLL.dll", EntryPoint="getAcctIDByNum",CallingConvention=CallingConvention.StdCall,CharSet=CharSet.Ansi)] 
    static extern short getAcctIDByNumstring pcDHHM, ref string ppcZHMSG,  ref string ppcZHID);
    应该就是正确的了
      

  7.   

    谁知道 char **& 再c#中对应什么呀,而且是在输出参数中,另加20分哈
      

  8.   

    还有double * &dxxfy,char *&pcZHMC,short & IsPrt  这几个在c#中的对应类型?
      

  9.   

    char **& 在c#中对应ref string