草庐IT

COM串口

全部标签

c++ - Windows COM C++ - 使用删除或释放

我想问一个简单的问题,我有一个Direct2D工厂,当我准备好清理时,我会调用delete还是使用releasemember?我看到一些教程只显式调用delete,所以我很好奇哪个更安全,除非发布成员所做的只是在后台调用delete等。`Graphics::~Graphics(){if(Factory)//Factory->Release();ordeleteFactory;if(Render)//Render->Release();ordeleteRender;} 最佳答案 释放COM接口(interface)的正确方法是在接口(

python - win32com.client.Dispatch 类标签

我正在尝试使用python连接到COM对象。更具体地说,我正在使用ASCOM标准驱动程序连接到MaxDomeII,但不知道如何引用该驱动程序。在此link作者使用“Celestron.Telescope”作为win32com.client.Dispatch实例化的参数。我的问题是如何找到这个字符串。我知道这与安装在计算机上的已安装驱动程序有关,但我不知道如何找到具体的字符串。有没有办法使用win32com.client列出COM对象?顺便说一句,在64位Windows7专业版上运行。谢谢 最佳答案 我认为不可能直接从python获取

windows - PowerShell "You must provide a value expression following the ' 调用WinSCP.com时出现/' operator"错误

我有一段代码可以将文件放入FTP服务器。看起来像这样:"C:\ProgramFiles(x86)\WinSCP\WinSCP.com"/command"openuser@myFTPServer:MyPort/MyPath/-privatekey=myprivatekey.ppk""putmyfile.txt""exit"这在Windows命令提示符下运行良好,但在PowerShell中运行相同的东西时它不起作用并返回以下错误:"Youmustprovideavalueexpressionfollowingthe'/'operator"我已经尝试了几种代码组合,但都没有奏效:1)"C:\

c++ - 能不能每次读完串口就清空串口?

读取串口数据后需要清空串口数据再读取数据吗?我在WindowsXP上使用C/C++我该怎么做?提前致谢 最佳答案 清除接收缓冲区几乎总是错误的。串行端口通信本质上是异步的,您将冒删除良好数据的风险。仅当您使用主从协议(protocol)(设备仅在主机查询时才传输)才允许清除。但是,如果接收缓冲区实际上有数据要清除,那么您将忽略协议(protocol)违规,这是您永远不想忽略的事情。可靠的串口通信需要一个协议(protocol)。用于验证消息完整性的校验和和用于从数据损坏中恢复的ACK/NAK握手。查看RFC916中描述的RATP协议

c++ - 如何在不同的目标平台上以编程方式巧妙地注册 32 位 COM/DLL 组件?

我曾使用以下函数在32位Windows平台(如WindowXP和Windows7)上注册我的32位COM/DLL组件。它工作正常。但是在64位Windows7上运行时,该函数无法注册成功。结果符合预期!intRegisterComponent(LPCTSTRlpszDllName){//LoadthelibraryHINSTANCEhLib=LoadLibrary(lpszDllName);if(hLib==NULL){return-2;}typedefHRESULT(CALLBACK*HCRET)(void);HCRETlpfnDllRegisterServer;//Findthee

windows - 串口数据损坏的异常模式

我正在通过从WindowsHyperTerminal发送数据来测试我的应用程序通过串行端口接收数据的情况,这大部分工作正常。例如,如果我发送:敏捷的棕狐我收到:敏捷的棕狐但是,如果我发送:UUUUUUUUUUU我收到了UUÕUÕUÕUÕUÕ或者如果我发送:aaaaaaaaaaa我收到:aaáaáaáaáaá因此对于任何长度超过2的重复字符串,第3、5、7等字符会因设置高位而损坏。两台机器上的串口设置完全相同。 最佳答案 我找到了这个:http://seetron.com/archive/html/ht_tip1.htm最后一段说:S

.net - 识别 .NET 应用程序中的 COM 组件

我继承了一个.NET应用程序,它汇集了大约100个由两个团队构建或从供应商处购买的dll。我想快速确定给定的dll是.NET程序集还是COM组件。我意识到我可以只对每个dll单独调用ildasm并在dll没有有效的CLRheader时做一个记录,但这种方法看起来很笨拙并且难以自动化。 最佳答案 如果您想从COM端着手,在DLL中测试COM对象归结为寻找名为“DllGetClassObject”的导出。这是因为COM运行时通过调用DllGetClassObject()访问进程内COM对象。在那个DLL上。您可以使用DUMPBIN.EX

windows - COM 对象是否负责将自己的模块保存在内存中?

假设您执行以下操作:1)使用LoadLibrary加载foo.dll。2)使用GetProcAddress获取指向函数的指针。3)调用该函数,为您提供对该模块中实现的COM对象的引用。4)通过调用FreeLibrary释放foo.dll。5)在COM对象上调用方法。您是否希望第5步成功但AV没有成功?也就是说,COM对象本身是否负责(再次)调用LoadLibrary以增加Windows为每个模块保留的引用计数,以确保它不会超过模块? 最佳答案 当然不是。模块引用计数由正常的使用方法维护-你正在做的是进入运行时方案的后门。通常,您使用

windows - 跨平台 COM 开发

众所周知,COM是独立于语言和平台的标准,但我一直只看到有关在Windows上开发COM组件的文章。您能否分享您对如何开发真正的跨平台应用程序的看法。 最佳答案 我在Mac和Unix上使用COM编写代码,没有支持库。你实际上只需要C++。它基本上是一个协议(protocol)。不过,如果你真的想用跨平台的COM来写,我建议你看看https://developer.mozilla.org/en/XPCOM 关于windows-跨平台COM开发,我们在StackOverflow上找到一个类似

.net - 无法使用 Windows 7 或 Windows Server 2008 64 位从 COM+ 目录导出 32 位 ServicedComponent

使用Windows2003Server或2000,生成一个COM+应用程序代理以在另一个系统上使用,包括在导出过程中创建的MSI包中的.NETEnterpriseServices组件。.NET组件也在GAC中注册,并且regsvcs在安装应用程序代理期间自动运行。但是,我们发现WindowsServer2008不包含该程序集。它将包括.tlb但不包括.dll,也不将其安装在GAC中,当然,当应用程序找不到程序集时一切都会崩溃。有人知道如何确保该行为像2000-2003年那样有效吗?更新我们可以仅使用.NET程序集生成代理,它工作正常,但如果我们尝试将其他程序集或遗留VB6COM+dll