我有一个CLR托管应用程序,试图使其支持WPF。
我尝试将字段的值设置为_Assembly
,但是问题是我必须传递类型为VARIANT
的变量。
这是我要转换为C ++的C#代码:
Assembly assembly = Assembly.Load(data);
...
field.SetValue(null, assembly); // I'm attempting to do that in C++
这是我所做的:
_AssemblyPtr pAssembly = NULL;
...
hr = AppDomain->Load_3(sa, &pAssembly);
...
CComVariant obj;
BindingFlags bFlags = (BindingFlags)(BindingFlags_SetField | BindingFlags_NonPublic | BindingFlags_Static);
hr = fieldInfo->SetValue(obj, CComVariant(pAssembly), bFlags, NULL, NULL);
它在fieldInfo->SetValue
处失败,并且在应该为VARIANT
类型的第二个参数处更准确。错误:hr = E_INVALIDARG One or more arguments are invalid.
如果将第二个参数设置为CComVariant(NULL)
,它不会失败,但是我需要将_Assembly
放在此处。
有什么办法可以解决这个问题吗?