我通过书籍学习C++和COM.在IDE MS Visual Studio 2012中,我创建了新的空C++项目,并向其中添加了一些现有文件.我的CPP文件包含#include<iostream>行,但在编辑器中我得到了这样的消息:
错误:标识符"cout"未定义
结束
错误:标识符"endl"未定义
屏幕:

为什么会这样?
我经常遇到类似的情况:我有一堆COM .DLL(没有IDL文件),我需要使用它并调用它们来访问一些外来的(非开放的,未记录的)数据格式.
Microsoft的Visual Studio平台具有非常好的功能,可以导入这些COM DLL并在我的项目中使用它们(Visual C++的#import指令,或使用Visual Basic .NET的对话框挑选和添加它们) - 这是供应商推荐的使用它们的方法.
我有兴趣找到一种在非Microsoft开发平台上使用这些DLL的方法.也就是说,在使用MinGW或Cygwin编译的C++项目中使用这些COM类,或者甚至将Wine的GCC端口编译为linux(将C++作为目标,将Win32编译为在Linux上本机运行的二进制文件).
我使用这个驱动程序取得了一些有限的成功,但是这在100%的情况下都没有成功(我不能使用某些方法返回的COM对象).
有人在类似情况下取得了成功吗?
我很好奇COM +,DCOM.我知道MSFT不鼓励你原生使用这个工具(意思是用C/C++,实际上没有很多文档可用)但我想学习使用这些技术,比如将Internet Explorer嵌入到C程序中.
我想也许我可以找到那些使用过这个或那个知道这项技术的人.
从哪儿开始?有任何想法吗?任何例子(如Hello World DCOM)?
我正在尝试在我的桌面上运行遗留的VB6应用程序(它没有用户界面,是一个命令行应用程序),当我这样做时,我收到一个消息框说
Run-time error '4099':
Method '~' of object '~' failed
Run Code Online (Sandbox Code Playgroud)
这对我来说没什么意义; 有没有人知道出了什么问题?
我有一个32位的COM组件DLL,这个DLL是用Delphi编写的.这是一个Win32 DLL.我想在.NET平台上的Visual C#项目中使用此DLL.
我无法在项目中添加对此DLL的引用.我尝试在Windows 7 64位中以管理员身份在命令提示符中注册它,但是我收到此错误:
检查模块是否与regsvr32.exe的x86(32位)或x64(64位)版本兼容.
首先我把DLL文件放到windows/system32文件夹中.然后我以管理员身份打开命令提示符.我编写regsvr32 huginalpha.dll并执行此命令.但是我得到了错误.我能做什么?
我在班上定义了新成员
protected COMObject.Call call_ = null;
Run Code Online (Sandbox Code Playgroud)
该类具有我订阅的以下事件处理程序
call_.Destructed += new COMObject.DestructedEventHandler(CallDestructedEvent);
Run Code Online (Sandbox Code Playgroud)
将我的成员设置为null,如下所示删除事件处理程序?
call_ = null;
Run Code Online (Sandbox Code Playgroud)
或者我必须取消订阅 - =?
我的团队使用大型模拟应用程序的COM API.大多数模拟文件都会运行到数百兆字节,并且在打开时似乎会完全加载到内存中.
我们执行的主要任务是遍历文件的对象模型中的所有元素,然后对每个元素执行"某事".
我们最近将我们的代码库从.NET 2迁移到VS 2010中的.NET 4,并且已经看到迭代速度下降了大约40倍(从大约10秒到大约8分钟).我们已将其减少到最小的代码示例(10行左右); 在VS 2005中编译它,运行它然后在VS 2010中打开项目并编译,将框架保留为2(我们使用制造商提供的COM互操作程序集).
在2005年,测试应用程序在2010年完成10秒,需要8分钟.
可能是什么导致了这个?
UPDATE
代码相当于:
var server = new Server();
var elements = server.Elements;
var elementCount = elements.Count;
for(int i = 0; i < elementsCount; ++i)
{
var element = elements[i];
}
Run Code Online (Sandbox Code Playgroud)
运行VS 2010的代码比VS 2005长40倍.
更新2
我合理地说,在一种情况下操作可能比另一种情况下显着减慢的唯一原因是数据在不同版本中通过COM进行不同的传输.
我们记录了两个案例的绑定日志,这是我们发现的; 在快速版本CustomMarshalers的天然图像未发现(这是由FUSLOGVW捕获的结合日志)
mscorlib程序
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.HTM
快速
LOG: Start binding of native image mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
LOG: Start validating native image mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
WRN: Native image does not …Run Code Online (Sandbox Code Playgroud) 在Windows Server 2012 R2上,在安装更新KB4340558(更新历史记录)/ KB4338424(已安装的更新)之后,我们无法再使用32位模式在经典ASP中实例化.NET .DLL(interop)server.createobject.我们收到错误0x800A01AD"ActiveX组件无法创建对象"
当我们卸载更新时,错误消失.尽管我付出了最大的努力,但我无法找到卸载的替代解决方案.我们希望重新安装更新并对Windows Server和/或DLL进行必要的更改,以允许正确地实例化COM对象.系统日志中没有线索,CVE数据库中没有线索,也没有ASP生成错误的线索.请帮忙!
是否可以在winform上使用ocx(ActiveX控件)(可能以编程方式添加它),而不首先在regsrv32中注册ocx?
我想要实现的是启用xcopy安装.我有从我的开发机器生成的"AxInterop .dll"和"Interop .dll"文件.
我已经看到了在没有先注册它的情况下调用COM dll的可能性(ProSysLib,据作者说,但我还没有测试过),因为ocx也是基于COM的,所以我认为必须有一些方法来也这样做.
Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs() 方法在Windows Server 2003上运行正常,也在XP上运行,但在Windows Server 2008上没有.我复制它,因为它给了所有的Dll和权限
我还尝试了网上提供的所有解决方案,例如文化设置和DCOM权限.
获得以下错误:
System.Runtime.InteropServices.COMException(0x800A03EC):来自HRESULT的异常:0x800A03EC
在
Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(Object Filename,Object FileFormat,Object Password,Object WriteResPassword,Object ReadOnlyRecommended,Object CreateBackup,XlSaveAsAccessMode AccessMode,Object ConflictResolution,Object AddToMru,Object TextCodepage,Object TextVisualLayout,Object Local)
请帮忙 ..!