4342|14

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE 6.0 在调试DLL中的函数时传入的char*类型的参数,看到的值是空的,但函数的执行结果却是正确的 [复制链接]

dll 头文件   Function.h
class _declspec(dllexport)CFunction : public CObject
{
public:
      CFunction();
      virtual ~CFunction();
      int Add(int a, int b);
      char* Link(char* stra , char* strb);
};

dll cpp     Function.cpp
int CFunction::Add(int a ,int b)
{
    return a + b;
}

char* CFuntion::Link(char* stra, char* strb)
{
    return strcat(stra, strb);
}


调用
把Function.h加到工程里面
加上 #pragma comment(lib,“DLLpro。lib”)

。。。
。。。


在其他文件包含该头文件
声明一个对象
CFunction m_cMyFunction


调用
void Fun()
{
        int a = 10;
        int b = 10;
        int c = cMyFunction.Add(a,b);
        //结果 c = 20 调试在CFunction里面的Add函数里看到的参数的值设正确的

        char stra[100];
        char strb[100];
        memset(stra,'\0',100);
        memset(strb,'\0',100);
        strcpy(stra,"0123456789");
        strcpy(stra,"abcdefg");
        stra = cMyFunction.Link(stra,strb);
        //结果 stra = 0123456789abcdefg 调试时在CFunction里面的Link函数传近的参数字符串为空
        //但如果在Link函数里加上
        //        char temp[100];
        //        memset(temp,'\0',100);
        //        strcpy(temp,stra);        
        //        拷贝后的temp = 0123456789
}


函数实际的执行结果的说的,但就是调试时看不到char*参数的值,这是怎么回事啊,dll是Debug版的。

最新回复

最后,不用DLL工程生成,改用生成LIB工程.可以正常调试了..  详情 回复 发表于 2010-1-17 22:50
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
  1. strcpy(stra,"0123456789");
  2. strcpy(stra,"abcdefg");
复制代码


是不是写错了:

  1. strcpy(stra,"0123456789");
  2. strcpy(strb,"abcdefg");
复制代码
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
如LS所说
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
我敲错了,实际代码没错,我们公司通过服务器上网,不能拷贝
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
  1. void Fun()
  2. {
  3. int a = 10;
  4. int b = 10;
  5. int c = cMyFunction.Add(a,b);

  6. char stra[100];
  7. char strb[100];
  8. memset(stra,'\0',100);
  9. memset(strb,'\0',100);
  10. strcpy(stra,"0123456789");
  11. strcpy(strb,"abcdefg");
  12. stra = cMyFunction.Link(stra,strb);
  13. }
复制代码


貌似程序就没有错哦...
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
是啊,运行的结果是正确的。
可是我但不跟踪的时候,进了DLL的函数里里面厚穿进去的参数值是空的
int 类型的就没问题。为什么啊??????
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
这个可能和DLL的内存共享原理有关.具体可以查查相关资料
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
我猜你是断在char* CFuntion::Link(char* stra, char* strb)函数里时,在debugger里看到stra/strb是NULL,这一般是由于release build里符号不匹配导致的(我的理解是由于优化或者没有足够的调试信息,debugger拿不到或者拿错变量的值)。
debug build应该没有问题

你可以看汇编,通过汇编里的地址看传入的参数是否正确。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
可是我的dll也是release的,真是搞不懂,我在dll函数里做strcpy把参数拷贝给临时变量就能看到他正确的值,我一直一位是我的工程设置的有问题呢。再等等吧看看有没有人遇到同样的问题,是怎么解决的,因为这个问题让我调试dll很麻烦。
我想在只能在PC上把动函数调试好在移到CE上,PC上调试倒是挺正常的。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
这个问题怎么解决啊?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 8 楼 cd_1_1983 的回复:
可是我的dll也是release的,真是搞不懂,我在dll函数里做strcpy把参数拷贝给临时变量就能看到他正确的值,我一直一位是我的工程设置的有问题呢。再等等吧看看有没有人遇到同样的问题,是怎么解决的,因为这个问题让我调试dll很麻烦。
我想在只能在PC上把动函数调试好在移到CE上,PC上调试倒是挺正常的。


我是说你的dll用debug build的,应该就没有这个问题了
你的dll是debug build的吗? 总之你都用debug, 应该就没有这种符号不匹配的问题
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
我也遇到这个情况,很奇怪,dll调试里看到的值不是实际的值,如果只能这样的话,调试很不方便!
望高手给予指点!
thanks!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
我也是这样,看到的是空值.......
同病相怜....
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
最后,不用DLL工程生成,改用生成LIB工程.可以正常调试了..
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表