小编kre*_*tar的帖子

在C++中设置模拟接口

我目前正在尝试使用某个SDK,它让我从供应商提供的DLL中加载函数.我必须将参数传递给这些函数,DLL完成所有工作.

现在,DLL应该与另一个设备通信,而我只是等待结果.但是,我没有这个设备,那么如何设置模拟界面来模拟设备呢?

要清楚,这是一个例子:

myfuncpointer.Open(someparam,anotherparam,...);
Run Code Online (Sandbox Code Playgroud)

现在,因为我没有设备,DLL实际上无法执行上述功能; 它失败.如何设置测试以便DLL与我设计的类而不是设备进行对话?有没有办法重定向DLL的调用?

如何使DummyDevice类执行此操作?

谢谢..

PS如果有什么不清楚,请不要太快速downvote ..评论我需要解释,我会尝试清理它..谢谢.


编辑:然而,我所拥有的是一张规格表,其中包含所有使用的数据结构以及它必须包含的预期/合法值.例如,如果我调用一个函数:

myfuncpointer.getinfo(param,otherparam);
Run Code Online (Sandbox Code Playgroud)

其中一个参数是一个数据结构,DLL在查询设备后填充了信息(比如,如果启用了选项)..我可以这样做

param.option = true;
Run Code Online (Sandbox Code Playgroud)

完成getinfo调用之后.

这是测试代码的好方法吗?欺骗这个DLL来思考所有错误的东西似乎非常非常危险,而且似乎真的很难扩展甚至只是一点点..

c++ windows oop testing

1
推荐指数
1
解决办法
894
查看次数

堆分配/释放导致堆栈溢出

编辑:只是为了说清楚,这个问题是由我的代码中的拼写错误引起的

pointer = new BYTE(datasize);
Run Code Online (Sandbox Code Playgroud)

本来应该

pointer = new BYTE[datasize];
Run Code Online (Sandbox Code Playgroud)

一切都很好!

结束

嗨!

我在C++项目中的Visual Studio 2005中遇到了奇怪的堆栈溢出问题.

在我的代码中,我有一个

BYTE* pointer;
Run Code Online (Sandbox Code Playgroud)

此指针设置为NULL,然后分配一些内存,然后清除为0x00.像这样:

pointer = NULL;
pointer = new BYTE(dataSize);
memset(pointer,0x00,dataSize);
Run Code Online (Sandbox Code Playgroud)

现在,我已经运行了几次,得到了两个不同的结果.有时候(在程序的后期,当我用delete []删除指针时)它表示堆已损坏,并且在检查调用堆栈似乎_CrtIsValidHeapPointer断言它不是有效指针.但是我检查了这个指针,它似乎对我有效(它有一个内存地址).我错过了什么吗?

在另一种情况下,应用程序冻结了很短的时间,我得到一个堆栈溢出消息.当我检查调用堆栈时,它看起来像这样

 something.dll!_heap_alloc_base(unsigned int size=568)  Line 105 + 0x28 bytes   C
something.dll!_heap_alloc_dbg(unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x0627fec8, int nLine=608)  Line 411 + 0x9 bytes C++
something.dll!_nh_malloc_dbg(unsigned int nSize=532, int nhFlag=0, int nBlockUse=2, const char * szFileName=0x0627fec8, int nLine=608)  Line 268 + 0x15 bytes   C++
something.dll!_malloc_dbg(unsigned int nSize=532, …
Run Code Online (Sandbox Code Playgroud)

c++ stack-overflow memory-management visual-studio-2005

1
推荐指数
1
解决办法
2884
查看次数

未处理的异常:0x80000001:未实现.(VC++)

我正在使用MS Visual Studio 2005(C++)..

任何人都可以告诉我什么可能导致运行时异常这样..?

yyy.exe中0x07ed0027(xxx.dll)的未处理异常:0x80000001:未实现.

xxx.dll是我正在研究的一个dll,yyy.exe是一个调用那个dll的exe ..当调试时出现未处理的异常时,它需要我一个函数,但我看不出函数有什么问题(每次调用此函数时都不会引发异常).无论如何,我检查了函数中的所有值,它们似乎没问题.如果我点击继续而不是中断,或者在休息后按F5,那么它会继续发生,如果没有发生..请告诉我,如果我没有提供足够的信息..

谢谢.

c++ visual-studio-2005 exception visual-c++

1
推荐指数
1
解决办法
4531
查看次数

#ifdef中的switch语句错误?

我有一些看起来像这样的代码:

someFunc(value)
{

    switch(value){
        case 1:
        case 2:
        case 3:
#ifdef SOMEMACRO
        case 4:
        case 5:
#endif
           return TRUE;
    }
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

定义SOMEMACRO,假设值为4 ..为什么跳过案例4和5而返回FALSE?:(

是因为我没有默认情况,或者我不允许在switch语句中使用ifdef?

c++ macros switch-statement

0
推荐指数
1
解决办法
1779
查看次数

解释MSVC++中的调试符号6

你会如何以像我这样的新手程序员理解的方式解释"符号"?

这些是什么?它们是某种功能映射吗?

我想学习更高级的调试技术,这个术语对我来说是一个障碍.

debugging symbols visual-c++-6 visual-c++

0
推荐指数
1
解决办法
414
查看次数

为什么strlen()似乎在VC++调试器中返回<void>?

我有一个C++类型的字符串const char*作为参数传递给strlen,但它返回void.

它就像

strlen(astruct.string);
Run Code Online (Sandbox Code Playgroud)

谢谢..

编辑:做了一些检查,

strlen("test");
Run Code Online (Sandbox Code Playgroud)

仍然无效......为什么?

编辑:这是图像 http://img14.imageshack.us/img14/1808/strlen.png

很抱歉以前不清楚.格式化效果不佳.无论如何,Evan Teran和Vlad Romascanu都解决了混乱.另请参阅Brian R. Bondy的回答.

谢谢.随意关闭.

c++ string visual-c++-6 visual-c++

0
推荐指数
1
解决办法
1465
查看次数