我用csharp的委托和[DllImport("kernel32.dll", SetLastError = true)]执行到cpp文件中
委托中的参数是Object类型,我在cpp中如何处理?
Object在csharp中已经被定义好各种类型,但是参数必须要Object! 在cpp下面似乎大小就不能判断了
也许我说的不清楚,这个项目我本身也不大清楚求各位给我一个解决的办法!

解决方案 »

  1.   

    delegate代码:
    private delegate Int32 BmPrintfDelegate(String pszFormat, Object p01....Object60)//-------------------------------------------------------------
    C#相关代码:
    public Int32 BmPrintf(String pszFormat, params Object[] Datas)
    { BmPrintfDelegate dele;dele = (BmPrintfDelegate)GetDelegate("BmPrintf", typeof
                    (BmPrintfDelegate));     
    PointerManager pm_pszFormat = new PointerManager(pszFormat);
    Object[] param = new Object[60];
    Int32 count = Datas.Length;
    for (int i = 0; i < count; i++)
    {
         param[i] = Datas[i];
    }Int32 rtn = dele(pszFormat,param[0]....param[60]);return rtn;
    }//-------------------------------------------------------------
    GetDelegate函数中会调用
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern IntPtr GetProcAddress(IntPtr hModule, string
               lpProcName);//-------------------------------------------------------------
    进入到cpp
    LONG BmPrintf(PSTR pszFormat, ...)
    {
        va_list arg_ptr;
        PDWORD param;    int nCount = 3;
        
        param = (PDWORD)malloc(sizeof(DWORD) * nCount);
        
        if (nCount)
        {
            va_start(arg_ptr, nCount);
            for (int i = 0; i < (SHORT)nCount; i++)
            {
                param[i] = va_arg(arg_ptr, DWORD);
            }
            va_end(arg_ptr);
        }
        // グロバル変数_pCiよりパラメータpszFormatのPPARAINFOを取得
        // PPARAINFOのVir(実入力値)にパラメータpszFormatの値をセット
        PPARAINFO ppiFormat = (PPARAINFO)(_pCi->paraInfoLst + 0);
        strcpy((char*)(ppiFormat->lpvVir), pszFormat);    for (int i = 0; i < nCount; i++)
        {
            PPARAINFO ppiParams = (PPARAINFO)(_pCi->paraInfoLst + (1+i));
            memcpy(ppiParams->lpvVir,  &param[i], sizeof(param[i]));
        }
        return *((LONG*)(_pCi->lpvVre));
    }
    //-------------------------------------------------------------Object类型已经做了相应的处理了!都已经改正各种System类型,只是delegate这里一定要用Object做参数,在cpp这里就不能得到正确的数值了
      

  2.   

    .net 和 c++ 本地代码是运行在不同的内存空间,相互调用,必须通过封送,就是传入对方的变量必须要让对方了解具体的二进制布局。
    另外你说的不是很清楚
    你到底是要把delegate传入 c++ ,还是通过delegate调用c++??
      

  3.   

    //   グロバル変数_pCiよりパラメータpszFormatのPPARAINFOを取得 
            //   PPARAINFOのVir(実入力値)にパラメータpszFormatの値をセット 
    又是小日本。