我正在尝试使用C ++来理解西门子扫描仪的编程,并且鉴于我的C ++技能有限,我在理解供应商提供的代码的许多部分时遇到了问题。
例如,代码使用引用(rMrProt)来对象MrProt和符号(例如使用().
和()[].
)对我来说非常混乱。
例如:
ImageSamples = rMrProt.kSpace().baseResolution()
ImageSize = rMrProt.sliceSeries()[0].readoutFOV()
对这些陈述的一些解释将不胜感激。
有关对象MrProt的所有信息都在“MrProt.h”,“MrProt.dll”,“MrProt.lib”中。所有这些文件都已在以下位置共享: https://docs.google.com/open?id=0B0Ah9soYnrlIYWZkNDU2M2EtYTNmNC00YTc5LTllMzItYzIyMWU4M2ZhY2Fi
另外,我一直试图读取MrProt.dll和MrProt.lib但没有成功。直到现在,我才知道了dumpbin。任何帮助将不胜感激。
我的另一个困惑是与MrProt.h本身的某些部分有关。 MrProt.h中有一个声明:
class __IMP_EXP MrProt: public MrProtocolData::MrProtDataDelegate
{
typedef MrProtocolData::MrProtDataDelegate BasicImplementation;
public:
MrProt();
MrProt(const MrProt& rSource);
…
….
}
在这里,__IMP_EXP
,我想这是一些编译器特定的东西..一些装饰等。但是,我仍然不知道该怎么做。
答案 0 :(得分:5)
问题1。
rMrProt.sliceSeries()[0].readoutFOV()
装置
rMrProt
的{{1}}成员并致电。显然,它返回一个类似于数组的对象,可以编入索引。sliceSeries
)。这是某种对象。[0]
。问题2.你真的不应该读二进制文件。应该有他们的文件。
答案 1 :(得分:3)
1)
ImageSamples = rMrProt.kSpace().baseResolution()
这只是方法链接。您在kSpace()
上调用返回对象的方法rMrPrto
,然后在该对象上调用baseResolution()
。
2)这些是二进制文件。你期望看到什么?要阅读它们,你必须是asm的专家,或者至少知道一些低级概念。
3)__IMP_EXP
是一种常见的指令类型,它告诉编译器该类是导出还是导入。
它扩展为_declspec(dllimport)
或_declspec(dllexport)
,具体取决于类的定义是在当前模块还是其他模块中。
答案 2 :(得分:1)
identifier()是方法/函数调用
identifier [i]返回数组中的第i个元素。
identifier()[i]返回由identifier()
返回的数组的第i个元素答案 3 :(得分:1)
我只能帮助解决问题1:
如果rMrProt.kSpace()
的返回值是结构。而不是将其保存到结构然后访问它的成员,您可以使用rMrProt.kSpace().MemberName
对rMrProt.sliceSeries()
来说是相同的,我想它会返回一个数组。所以rMrProt.sliceSeries()[0]
将访问返回数组中的第一个值。