问题描述
假设className,methodName是参数被传入我用下面的代码调用了某个DLL中的方法Assembly^dllAssembly=Assembly::LoadFrom(dllPath);array<System::Type^>^selectType=dllAssembly->GetTypes(className);MethodInfo^selectedMethod=selectType->GetMethod(methodName);System::Object^instance=Activator::CreateInstance(selectType);output=selectedMethod->Invoke(instance,gcnewarray<System::Object^>(1){parmObj});在一般情况下,output是正常的返回结果.但如果返回如下(在Watch中显示):-output0x000000200fa437b0System::Object^-[HPFS::IDS::OrganizationMaster::Processors::RplStatusProcess::<GetFromIds>d__3^]0x000000200fa437b0HPFS::IDS::OrganizationMaster::Processors::RplStatusProcess::<GetFromIds>d__3^可是由于DLL是动态的,存在DLL返回了一个方法,如上返回了RplStatusProcess(),而C++直接接受了这个方法引用作为结果,而没有返回期待的结果。如果用C#的反射调用就不会这样。请问如何解决?----------------------------------------------------------------------------后经通沟得知,被调用方法代码如下:publicIEnumerable<RplStatus>GetRplStatus(IEnumerable<long>otherPartySiteInstanceIds){using(LogManager.Register(MethodBase.GetCurrentMethod()))returnthis.RplStatusProcess.GetFromIds(otherPartySiteInstanceIds);}----------------------------------------------------------------------------经过问题重现研究,是由于this.RplStatusProcess.GetFromIds()这个方法中有yield这个关键词。托管C++用反射调用DLL中的方法时遇到yield时该如何?
解决方案
本帖最后由 qiuhgr 于 2015-03-23 14:09:40 编辑
解决方案二:
也许只是一个很简单的事,只是我不了解该技术:如何从返回的引用指针中得到实际想要的值?