我想将字符串“设备名称”传递给void *方法的指针参数,然后将其检索到字符数组。
为此,我做了如下所示的操作。
在这里,我创建了一个动作来实现这一目标。
ACTION_P(SetArg2ToChar, value) {*static_cast<char*>(arg2) = *value; }
Run Code Online (Sandbox Code Playgroud)
要调用/模拟的实际方法
bool getDictItem(WORD wIndex, BYTE bSubIndex, void * pObjData, DWORD dwLength, CSdo& sdo)
Run Code Online (Sandbox Code Playgroud)
我的模拟方法
MOCK_METHOD5(getDictItem,
bool(WORD wIndex, BYTE bSubIndex, void * pObjData, DWORD dwLength, CSdo& sdo));
Run Code Online (Sandbox Code Playgroud)
在代码中它被称为
if( !can.getDictItem(wIndex, bSubIndex, pObjData, dwLength, tSdo) )
Run Code Online (Sandbox Code Playgroud)
我想将一个字符串传递给它pObjData(列表中的第三个参数)。
在我的谷歌测试中,我就是这样做的。
char szDeviceName[30]= {0};
snprintf(szDeviceName, sizeof(szDeviceName), "%s", "Device Name" );
EXPECT_CALL( mockCan, getDictItem(_,_,_,_,_) )
.WillOnce(DoAll(SetArg2ToChar(szDeviceName),
Return(true)))
.RetiresOnSaturation();
/* Call a real method within which this mock method is called */
Run Code Online (Sandbox Code Playgroud)
如果我尝试直接使用“SetArgPointee<2>”设置此参数(pObjData),则会收到以下错误。 …
最初,我们正在开发.Net Framework 3.5.因此,GAC路径在代码中被硬编码为
C:\Windows\assembly\GAC_64\{0}\1.0.0.0__008145f79b9aec14\{0}.dll
Run Code Online (Sandbox Code Playgroud)
后来我们迁移到.Net Framework 4.0.现在应该是必需的路径
C:\Windows\Microsoft.NET\assembly\GAC_64\{0}\v4.0_1.0.0.0__008145f79b9aec14\{0}.dll
Run Code Online (Sandbox Code Playgroud)
目前可以通过将第二个路径放在我的代码中来解决问题.但是当微软发布下一套框架时,它可能会失败.
所以我想知道是否有任何方法可以独立于.Net Framework访问GAC二进制文件.
对此有任何意见都会有所帮助.谢谢