hackbs2 2017-03-16 10:35 采纳率: 0%
浏览 1323
已采纳

DLL导出函数调用本地函数,char**参数问题

先上3张图片
图片说明
图片说明
图片说明

图片1是导出函数,图片2是导出函数里面调用了本地函数的代码,可以看到这时候二级指针参数,char ** argv,这时候还是有值的,等我调试到了图片3的函数 argv参数的值就没有了。

这里附上个完整的导出函数代码

 extern "C" __declspec(dllexport) BOOL phadb_exeCmdLine(const char* strCmdLine,char *strOut)
{
    /***************************************************************************************/
    int t = 0;
    int flag = 0, stop = 0, num = 0;

    char argv[ADB_CMDLINEMAX][_MAX_PATH];
    char **pargv = new char *[ADB_CMDLINEMAX];
    for (int i = 0; i<ADB_CMDLINEMAX; i++)
    {
        pargv[i] = new char[_MAX_PATH];

    }

    for (size_t i = 0; i < ADB_CMDLINEMAX; i++) {
        memset(argv[i], 0, _MAX_PATH);
        memset(pargv[i], 0, _MAX_PATH);
    }

    for (size_t i = 0; i < strlen(strCmdLine)/*.size()*/; i++)
    {
        if (strCmdLine[i]/*.at(i)*/ !=  32){
            memcpy(&argv[flag][num], &strCmdLine[t], 1);
            //argv[flag][num] = strCmdLine[t]/*.at(t)*/;
            num++;
            stop = 0;
        }
        else if (strCmdLine[t]/*.at(t)*/ == 32 && stop == 0)
        {
            flag++;
            num = 0;
            stop = 1;
        }t++;
    }
    for (size_t i = 0; i < ADB_CMDLINEMAX; i++){
        memcpy(pargv[i], argv[i], _MAX_PATH);
    }




    int argc = flag;
    BOOL nRet = TRUE;
    if (argc > 0 ){
        nRet = adb_commandline(argc, (char**)argv);
        fread(strOut, 1, 256, stderr);
        if (nRet == FALSE)
        {
            return nRet;
        }

    }
    return nRet;
    /*******************************************************************************************/
}

  • 写回答

2条回答 默认 最新

  • hackbs2 2017-03-17 02:36
    关注

    自己把问题解决了,要动态分配二维数组才行。这样以二级指针的方式传入就不会错误了。

    //将上面代码的cahr argv[ADB_CMDLINEMAX][MAX_PATH];//修改成如下的 
     char **argv = new char*[MAX_PATH];
     //初始化,动态分配一级指针的内存
     for(int i=0;i<ADB_CMDLINEMAX;i++){
                    argv[i] = new char[MAX_PATH];
                    memset(argv[i],0,MAX_PATH);
     }
    
     //完美,By FF00E4 Team  ,Lee
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 准备学习小程序搭建,谁能手把手的教我啊?
  • ¥15 关于#嵌入式硬件#的问题:树莓派第一天重装配置python和opencv后第二天打开就成这样,瞎捣鼓搞出来文件夹还是没把原来的界面调回来
  • ¥20 Arduino 循迹小车程序电路出错故障求解
  • ¥20 Arduino 循迹小车程序电路出错故障求解
  • ¥100 AT89C52单片机C语言调试之后再回答
  • ¥15 AT89C52单片机C语言串口助手发送数据包返回值
  • ¥15 C++数组中找第二小的数字程序纠错
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e