草庐IT

c++ - 缩略图提供程序不工作

我正在尝试为我们的自定义文件类型编写一个Windows资源管理器缩略图处理程序。我在预览面板上运行良好,但在缩略图上运行时遇到了问题。Windows似乎甚至没有尝试调用DllGetClassObject入口点。在我继续之前,请注意我使用的是Windows7和非托管C++。我在注册表中注册了以下值:HKCR\CLSID\HKCR\CLSID\\InprocServer32(defaultvalue=pathtomyDLL)HKCR\CLSID\\InprocServer32\ThreadingModel(value="Apartment")HKCR\.\shellex\{E357FCCD

c++ - 使用 CoCreateInstance 时内存泄漏

我正在使用COM通过C++非托管代码初始化C#.NET类,并且即使在非常基本的程序中我也检测到内存泄漏:int_tmain(intargc,_TCHAR*argv[]){CoInitialize(NULL);ComClass::IClass1*_comClass1;HRESULThr=CoCreateInstance(__uuidof(ComClass::Class1),0,CLSCTX_INPROC_SERVER,__uuidof(ComClass::IClass1),reinterpret_cast(&_comClass1));_comClass1->Release();CoUni

c++ - 缺少方法: SXS and Controls.的奇怪案例在 "object doesn'中添加结果支持此属性或方法”?

我有一个用VB6编写的项目,它使用了一个UserControl,该项目在注册OCX时运行良好,但如果我使用并排list运行同一个项目,则会导致错误。我可以毫无问题地使用控件,只要它是静态加载的(之前添加到窗体上),但是如果我添加一个动态控件以在任何使用新控件(属性或方法)时使用窗体,我都会收到此错误:Objectdoesn'tsupportthispropertyormethod这个错误可以这样重现:在VB6中创建一个OCX项目添加用户控件添加一个方法,例如DoSomething控件创建一个exe项目将控件添加到表单,例如UserControl1在事件中调用DoSomething动态加

c# - 从 C++ 调用 C# 事件

我想知道从C++代码调用C#代码的最佳做法是什么?我到底想要什么:我已经编写了c++代码,当用户使用这个程序并遇到c++代码中的某些功能时,我想调用另一个c#代码来执行其他事情,所以它就像语言之间的委托(delegate)。我怎样才能最好地做到这一点?到目前为止,我的想法是:在c#中,我可以制作Web服务,然后用C++调用它。 最佳答案 我建议将C#类导出为com可见类。然后在C++中使用它们。 关于c#-从C++调用C#事件,我们在StackOverflow上找到一个类似的问题:

c++ - 处理 CoCreateInstance 返回值

这是创建COM对象的代码示例:CComPtrpFilter;autohr=CoCreateInstance(CLSID_DMOWrapperFilter,NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,reinterpret_cast(&pFilter));我在某处看到检查CoCreateInstance()是否成功应该如下所示:if(SUCCEEDED(hr)&&pFilter!=nullptr){//codegoeshere}如果我只检查hr会怎样?还不够吗?我还应该检查filter!=nullptr吗?//wouldthisbeenough?i

c++ - 为什么我可以在没有调用 CoInitializeEx 的情况下调用 StringFromCLSID?

我正在通过C++学习COM。来自MSDN:ApplicationsarerequiredtouseCoInitializeExbeforetheymakeanyotherCOMlibrarycallsexceptformemoryallocationfunctions.内存分配函数在我看来是CoTaskMemAlloc和CoTaskMemFree。但我明白了,无论是否调用CoInitializeEx和CoUninitialize函数,我的“HelloWorld”都能正常工作。在我的代码中,我使用了在combaseapi.hheader中声明的StringFromCLSID函数。所以,在

c++ - 来自 cppreference.com 的模板参数特化示例不起作用

我在http://en.cppreference.com/w/cpp/language/partial_specialization上找到了这个例子templatestructB{};templatestructB{};//OK:firstparameterisdeducible我在使用-std=c++11和-std=c++14编译时出错如何编译这个?或者也许例子是错误的?error:templateargument‘(I*2)’involvestemplateparameter(s)templatestructB{};//OK:firstparameterisdeducible

c++ - 如何在 Windows 属性系统中创建 IconList 属性?

目前,我的属性处理程序提供的属性可以显示在String类型的Windows资源管理器列中。.我的目标是通过(显示)类型Icon的属性扩展处​​理程序,该属性可以作为列添加到Windows资源管理器的详细信息View中。在此列中,应为每个文件项显示一个图标,例如。G。该图标可以代表文件的几种可能状态中的特定状态。但是,我没有设法在Windows属性系统的基础上正确地组装创建具有这些特征的属性的必要部分。我的方法的第一步是在.propdesc文件中指定属性的XML,然后通过通常的PSRegisterPropertySchema注册过程。这总是成功运行,并且该属性列在Windows属性系统中

c++ - 我可以阻止 COM 在被调用进程中吞下未捕获的 C++ 异常吗?

我正在维护一个将进程间COM与C++结合使用的项目。在被调用函数的顶层,在通过COM返回之前直接有try/catch语句。catch将任何C++异常转换为自定义错误代码,这些代码通过COM层传递回调用方。出于调试的目的,我想禁用此try/catch,并简单地让异常导致被调用进程崩溃(通常会发生未捕获的C++异常)。对我来说不幸的是,COM边界似乎吞没了这些未捕获的C++异常,我没有遇到崩溃。有没有办法在COM中改变这种行为?即,我希望它允许未捕获的C++异常导致被调用进程崩溃。我希望发生这种情况,以便我可以附加调试器并查看引发异常的上下文。如果我只是将try/catch留在原地,并在c

c# - 如何通过 COM 互操作将字符串集合从 C# 返回到 C++

我在C#中为某些Display方法创建了一个com组件,它返回一个字符串列表如下图。在v++中,我使用std::lst来捕获Disp()的返回值,但它给出Disp不是类成员的编译器错误。然后我将返回类型设置为void它工作正常。我可以修改什么以便Disp返回一个列表并且在main(c++)中我必须使用这个返回值。PublicinterfaceITest{ListDisp();}classTestLib:ITest{ListDisp(){Listli=newList();li.Add("stack");li.Add("over");li.Add("Flow");returnli;}}成功