小编Ste*_*eve的帖子

是否可以在服务结构中使用visual studio性能分析?

希望这很简单......

我想要性能配置我的服务结构集群.

到目前为止,我: - 转到启动诊断工具,无需调试. - 通过向导选择我的服务结构项目作为启动项目. - 然后它询问要包含哪些项目,所以我包括我的服务exe - 然后我选择检测(我想要方法级别的时间)

然后我点击开始并立即我的exe崩溃.我认为这是因为visual studio试图在服务结构上下文之外运行我的"服务"作为独立的exe.

虽然不知道怎么办...

堆栈跟踪是:

DEBUG:激活选项

未处理的异常:System.Fabric.FabricConnectionDeniedException:未授权连接---> System.Runtime.InteropServices.COMException:来自HRESULT的异常:0x80071C43位于System.Fabric.FabricRuntime的System.Fabric.Interop.NativeRuntime.FabricEndGetNodeContext(IFabricAsyncOperationContext context) System.Fabric.Interop.AsyncCallOutAdapter2`1.Finish(IFabricAsyncOperationContext context,Boolean expectedCompletedSynchronously)---内部异常堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess上的.NativeFabricRuntimeFactory.GetNodeContextEndWrapper(IFabricAsyncOperationContext context)位于Microsoft.ServiceFabric.Services.Runtime.RuntimeContext.d__3.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的任务任务---从抛出异常的上一个位置开始的堆栈跟踪结束--- System.Runtime.C上的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)Microsoft.ServiceFabric.Services.Runtime.ServiceRuntime.d__0.MoveNext()中的ompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter System.Runtime.CompilerServices.TaskAwaiter.GetResult()上的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的.ThrowForNonSuccess(任务任务)

我在这里先向您的帮助表示感谢!

.net c# profiling visual-studio-2015 azure-service-fabric

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

GUID的COM SAFEARRAY从C++返回到C#

我目前遇到一个问题,需要将SAFEARRAY(GUID)作为返回值从C++传递给C#.

目前,C#端正在使用从Tlbimp.exe(类型库导入程序)生成的Interop dll.

IDL是:

HRESULT GetGuids(
    [out]SAFEARRAY(GUID)* guids);
Run Code Online (Sandbox Code Playgroud)

我也试过[out,retval]

功能签名是:

HRESULT
WINAPI
MyClass::GetGuids(SAFEARRAY** guids)
Run Code Online (Sandbox Code Playgroud)

如果我使用SafeArrayCreate()SafeArrayCreateVector():

SAFEARRAY* psa
psa = SafeArrayCreate(VT_CLSID, 1, rgsabound);
Run Code Online (Sandbox Code Playgroud)

我得到一个NULL SAFEARRAY指针,它应该指示E_OUTOFMEMORY哪个是不正确的.

我发现的VT_CLSID只是Ole属性集而不是SAFEARRAY:http: //poi.apache.org/apidocs/org/apache/poi/hpsf/Variant.html它表明CLSID是

我还尝试了使用以下方法构建安全数组的替代方法: SafeArrayAllocDescriptor()SafeArrayAllocData().

hResult = SafeArrayAllocDescriptor(1, guids)
hResult = SafeArrayAllocData(*guids);
Run Code Online (Sandbox Code Playgroud)

这让我创建了数组,但是当SafeArrayPutElement()我用它填充它时,我得到一个0x80070057的HRESULT(参数不正确).这可能是因为它也需要VT_CLSID参数

我可以手动填充它 SafeArrayAccessData()

GUID* pData = NULL;
hResult = SafeArrayAccessData(*guids, (void**)&pData);
Run Code Online (Sandbox Code Playgroud)

但我从C#端得到一个错误:"该值不在预期的范围内"

我不确定如何通过retval或out参数完成将SAFEARRAY(GUID)返回到C#的所需功能.

它似乎应该很简单 - IDL中有很多区域我已经在没有任何UDT或编组的情况下传递GUID.一切正常,直到我需要在SAFEARRAY传递它们.

任何帮助表示赞赏,在此先感谢

c# c++ com guid safearray

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