在C# .NET中,返回S_OK或E_FAIL的值通常表示一个方法是否成功执行。S_OK表示成功,而E_FAIL表示失败。这两个值通常在Windows API中使用。
在C#中,可以使用以下方式定义这两个常量:
public const int S_OK = 0; public const int E_FAIL = -2147467259;
因此,从C# .NET代码返回S_OK或E_FAIL的值分别为0和-2147467259。
_GetCount()); return E_FAIL; } } 调用的代码如下: // 被动关闭/关闭超时 void CTcpPort::EndClose(HRESULT reason) {...S_OK是COM服务器返回正确 S_FALSE是COM服务器返回错误,不过这个错误是可以不处理的,不影响程序正常运行。只是结果不是想要的 E_FAIL是必须处理的错误。...返回E_FAIL,是告诉调用程序--某些地方出错,必须进行处理。否则,程序不能进行下去了。 返回S_FALSE,不是表示出现错误。 而S_OK和S_FALSE,则程序逻辑的不同表示。...所以在使用SUCCEEDED和FAILED来判断返回值的时候,需注意S_FALSE也表示成功,只是其结果并不是想要的,因此FAILED(S_FALSE)返回为"非",SUCCEEDED同理。...当自己写的函数接口返回值为HRESULT的时候,如果想要指明其出错,并且必须被处理时,应返回E_FAIL。
本系列将记录从开发、部署、更新、卸载到ActiveX与JS间的交互的.Net开发ActiveX全过程。...开发IObjectSafety接口 为了让ActiveX控件获得客户端的信任,用户控件必须实现`IObjectSafety`接口,并且下面的代码是固定的(GUID也不能变) [ComImport...="200px" height="200px"> 8.1. classid:用于指定要加载的ActiveX的clsid,clasid就是用户控件的GUID值; 8.2. codebase...:用于指定clasid的基本URL,可为绝对或相对路径,因ActiveX控件被打包到安装包中,所以codebase必须为安装包的路径。 ...那么ActiveX控件的绝对路径就是 www.text.com/test.cab(或test.exe)/xxxxxxxxxxxxxxx。
这样做的目的,是为了让本文能够更专注的解释C#客户端使用DCOM服务器的过程—因为把COM库后台执行的操作尽可能地排除掉了。 下面是这个DCOM服务器的源代码: 1....Message(TEXT("Client: Done"), S_OK); 131. } // main 第62行的代码,DCOM既然是远程服务器,那它就应该是可以运行在另外一台机器上,然后被其他机器的客户端所使用...所以C++的客户端代码里,你可以通过编程的方式指定服务器的名称,但是对于C#来说,因为连接到DCOM服务器并激活COM对象的操作是由CLR完成的,没有办法在代码里指定。...\Software\Microsoft\OLE\EnableRemoteConnect 第91行代码就是激活DCOM服务器的代码了。...为了解决上面两步操作,CLR团队提供了tlbimp.exe这个程序,这个程序需要一个类型库(.tlb)文件,从类型库中获取COM对象和接口的定义,然后将这些定义转换成C#的定义,最后将C#的定义封装到一个所谓的
一是查询ActiveX组件是否实现了IObjectSafety接口,并且 返回脚本安全;二是查询ActiveX组件是否在注册表的Component Category Manager里表明自己实现了 CATID_SafeForInitializing...)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions); } } 在UserControl1控件的后台代码我们要实现这个接口...看一下代码 using System; using System.Windows.Forms; namespace ActiveXDemo { using System.Runtime.InteropServices...= 0; private const int E_FAIL = unchecked((int)0x80004005); private const int E_NOINTERFACE...Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions) { int Rslt = E_FAIL
功能:将对机具操作的FK.dll封装成fk.ocx,注册后能在网页上对机器操作。...7.为了让ActiveX控件获得客户端的信任,控件类还需要实现一个名为“IObjectSafety”的接口,要创建该接口(注意,不能修改该接口的GUID值),IObjectSafety.cs代码如下:...= 0; 13 private const int E_FAIL = unchecked((int)0x80004005); 14 private const int...Form应用程序的安装部署几乎一样,只有一个地方需要注意,将前面创建的用户控件项目作为主输出项目,并设置其Register属性为vsdrpCOM ? ...21.附代码 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using
= 0; 30 private const int E_FAIL = unchecked((int)0x80004005); 31 private const int E_NOINTERFACE...ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions) 37 { 38 int Rslt = E_FAIL...SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions) 68 { 69 int Rslt = E_FAIL...,用类似下面这样的代码来本机调用了: 注意:c#定义的public方法,如果想直接让js调用,只能返回string,DateTime,int,double这一类基本值类型,其它返回类型比如array,object...(可以参考我的另一篇重温delphi之:如何快速开发原生ActiveX控件) 示例源代码下载:http://files.cnblogs.com/yjmyzz/ActiveXDemo.rar
从组件A如何管理组件B的方法上,第二种方法还可以分为两种:包容和聚合。... ppv) : T2::CreateInstance(pv, riid, ppv); } }; 模板参数T1 和T2 可以是CComCreator或CComFailCreator...若想创建被聚合情况下的组件,那么就会调用 CComFailCreator::CreateInstance(),然后直接返回参数CLASS_E_NOAGGREGATION。...同样,如果组件仅支持聚合,那么T1就是CComFailCreator,创建时直接返回E_FAIL。 CComAggObject提供了两个IUnknown的实现。...DECLARE_PROTECT_FINAL_CONSTRUCT()//声明和定义了GetControllingUnknown函数 HRESULT FinalConstruct(){ HRESULT hr = S_OK
我们看下用户填写信息的位置的HTML代码结构 ? ...; do { // 下标没有从0开始!...我做了点改动:在tesseract-ocr的init函数中,提供了一个指定相关目录的参数,但是代码底层却优先读取了系统环境变量TESSDATA_PREFIX的值作为相关目录。...我修改了源代码中的这部分:即只使用我指明的程序路径,而不是使用系统环境变量TESSDATA_PREFIX的值。 我封装了一个文字识别的类COcr。...下面的代码,将验证码区域复制到剪贴板中,然后再将剪贴板中的图片保存为一个32位真彩色的bmp图片。
InternalQueryInterface函数定义在CComObjectRootBase类中(这里显示的代码已经删除了调试扩展的内容)。...在查询接口之前,先检查查询的接口IID,如果请求的是IUnknown,从表中取出第一个表项立即返回,不需要偏历表的剩余部分。 ...如果不为NULL,表项IID与请求IID进行比较,如果匹配,pFunc引用的函数被调用,结果返回客户。如果不匹配,进入下一个表现搜索。 2....如果piid为NULL,则不管请求的IID是什么,都会调用pFunc。如果接口是S_OK,则返回结果给客户。否则继续搜索下一个表项。..., //请求的接口IID LPVOID* ppv, //存储返回的结构指针 DWORD_PTR dw);//来源于接口映射表项的dw 3.常用的 pFunc 函数的定义 常用的pFunc函数在
传入两个参数: 重启后使用的命令行参数(例如当前正在打开的文件,以及正在阅读或编辑的位置) 决定是否进行重启的限制标记(任何时候都能重启还是在某些条件下关掉重启功能) 我封装了以下这个函数的调用并将其放到...调用代码如下: if (ApplicationRestartManager.IsRestartManagerSupported) { ApplicationRestartManager.RegisterApplicationRestart...该值指示当前操作系统环境是否支持 Restart Manager 功能。...the result of an update. /// /// /// This function returns S_OK...on success or one of the following error codes. /// - E_FAIL: Internal error. /// -
// 对CoCreateInstance的调用返回IGraphBuilder接口,它主要包含了生成筛选器表的方法。...此例中用到的另两个接口为: // IMediaControl,作用是控制流。它包含了停止和启动表的方法 // IMediaEvent,它包含的方法是从筛选器表管理器中得到事件。...执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码...return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。.../或调用默认值 m_bStop = TRUE; CDialogEx::OnClose(); } void CDShowCameraDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码
本单例使用模板实现,代码如下: [cpp] view plain copy print ?...,在linux的开发中,我们需要做一些包装,使其在开发过程中和window代码一致。.../**< 成功,但值为1 */ E_FAIL = _HRESULT_TYPEDEF_(0x80004005), /**< 未定义错误 */ E_NOTIMPL = _HRESULT_TYPEDEF...= ((HRESULT)0x00000000), /**< 成功,值为0 */ S_FALSE = ((HRESULT)0x00000001), /**< 成功,但值为1 */ E_FAIL...*/ }; /// 判定 HRESULT 值是否为成功值 #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0) /// 判定 HRESULT 值是否为失败值
它支持允许文件和内存或流扫描、内容源 URL/IP 信誉检查和其他技术的调用结构。 AMSI 还支持会话的概念,以便杀毒软件可以关联不同的扫描请求。...用户帐户控制或 UAC(EXE、COM、MSI 或 ActiveX 安装的提升) PowerShell(脚本、交互使用和动态代码评估) Windows 脚本宿主(wscript.exe 和 cscript.exe...可以利用 AMSI 技术的应用程序类型包括脚本引擎、需要在使用前扫描内存缓冲区的应用程序,以及处理可能包含非 PE 可执行代码(例如 Microsoft Word 和 Excel 宏或 PDF 文档)的文件的应用程序...此函数可以返回标准返回值 E_OUTOFMEMORY 和 E_UNEXPECTED,以及以下值。 返回值 返回码描述 S_OK 注册表项已成功创建。...这里使用powershell来传入关键词; 我们可以看到在注册表中包含了我们的注册的值 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AMSI\Providers ?
从名字上可知,HLSL是一种高级语言(High Level),那么必然有与之对应的Low Level Shading Language,这个低级的语言就是ASM的Shader。...InitVS() { ::D3DVERTEXELEMENT9 decl[18]; //使用FVF自动代入顶点的声明值... D3DXDeclaratorFromFVF(D3DFVF_CUSTOMVERTEX,decl); //顶点声明值生成g_pDecl...MessageBox(NULL,(LPCSTR)pCompilationErrors->GetBufferPointer(),NULL,NULL); return E_FAIL... g_pEffect->SetMatrix("matWVP", &matWVP); return S_OK
///////////////////////// ((IInternetSecurityManager*)*ppvObject)->AddRef(); return S_OK...“启用”、“禁用”或“提示”,本内嵌IE对活动脚本的设置都是“启用”。...当初我也纠结于这个问题,后来我注意了下QueryService,发现此处的hr一直不会是S_OK。...在没有办法的情况下,我就将代码改为: if (guidService == SID_SInternetSecurityManager && riid == IID_IInternetSecurityManager...至于为什么,可能只有微软知道了,或许该处就应该返回S_OK,而不是根据AddRef的返回值来决定返回值。 希望所有使用IE控件的界面库设计同学都能很好的解决这个问题。
但是各种语言对WMI的控制能力是不同的,比如脚本语言只能用来从WMI获取数据或者接收事件通知。而C++还可以编写WMI提供者和发送消息。...pAuthList ---- // parameter of CoInitializeSecurity ------------------------ HRESULT hr = E_FAIL...最后一个参数返回了IWbemServices结构的代理。我们可以通过该代理访问WMI服务。...CWMI::~CWMI(void) { CoUninitialize(); } 总体来说执行的流程用代码可以描述为 HRESULT CWMI::ExcuteFun() {...HRESULT hr = E_FAIL; CComPtr pLoc = NULL; CComPtr pSvc = NULL;
类型枚举器(Category Enumerator)为每个这种类型的设备返回一个Moniker,类型枚举器自动把每种即插即用的设备包含在内。...注意:调用ICreateDevEnum::CreateClassEnumerator方法生成类型枚举器,参数为用户想要得到的类的ID(CLSID),该方法返回一个IEnumMoniker接口指针。...如果指定的类型是空的或不存在,则函数ICreateDevEnum::CreateClassEnumerator将返回S_FALSE而不是错误代码,同时IEnumMoniker指针也是空的,这就要求我们在调用...(需要重点说明的是:枚举设备这一块不是DShow封装库中的代码,这是由我们EasyDarwin团队的Gavin大神之前的DShow采集部分代码中提供的(前身是EasyCamera_win),我只是鸠占鹊巢的给大家讲解...,当时引进这个库就是为了能在采集端保证音视频从源头是同步的,当然,其实线程模式也是能实现同步的;线程模式的优点是:采集即时性高,即需即取,几乎不会有延时,缺点就是:如果出现取数据端不及时时,如果不考虑缓存的情况下可能就会出现丢帧
基础知识 反恶意软件扫描接口简称"AMSI",它是微软在Windows中阻止危险脚本执行的解决方案,AMSI理论上是一个好的解决方案,它通过分析正在执行的脚本然后根据是否发现恶意内容来阻止或允许,然而正如我们稍后将讨论的那样...函数hook 函数hook是一种在函数被调用之前对其进行控制的方法,这使我们作为攻击者可以做多种事情,例如:记录参数、允许/阻止功能的执行、覆盖传入函数的参数、并决定要返回的值,考虑到这一点我们需要找出...答案是代码注入,我们需要让我们的代码进入AMSI所在的同一个进程,然后hook函数并返回一个安全消息 DLL注入 DLL(动态链接库)是一种类似于PE/COFF的文件格式,但它是不可执行的,就其本身而言它需要在运行时加载一个...,所以如果你想把它用在工作中,你应该考虑一下,我建议创建一个使用手动映射的反射DLL加载器,下面让我们直接进入代码编写,完整的资源库可以在这里找到 https://github.com/tomcarver16...dll,该dll分配一个可以写入的控制台以便进行调试,然后我们绕过AmsiScanBuffer,我们的版本记录了一些信息以明确我们已经跳转到我们的代码,而不是直接跳转到实际的AMSI代码,看到传入的参数也很有趣
MATLAB拥有众多的算法包,.Net平台下的F#是用于数据分析的语言,但相比较而言,MATLAB的算法更多,计算效率更高,而且MATLAB的绘图能力很强;另一方面,MATLAB在传统的UI界面、程序功能控制...、系统软件集成等方面略逊,因此将C# WinForm等与MATLAB结合起来,实现高效、便捷、集成的数学分析是一个很好的解决方案,而MATLAB的混合编程则可以支持该方案的实现。...MATLAB的混合编程,即将MATLAB平台(软件、计算引擎、DCOM服务、命令行接口等)与C#.Net等平台结合起来,分别负责某部分功能,相互传递数据和命令,共同实现数据分析。...MATLAB与C#.Net实现混合编程的方式有两种,一种是将MATLAB脚本编译为.Net程序集(dll),然后C#.Net引用该程序集实现数据分析;另一种是C#调用MATLAB执行MATLAB脚本(m...方法执行代码,并可以获取到返回值。
外部输入的参数不能直接作为文件路径,防止被恶意攻击,比如构造一个跨目录限制的文件路径…/…/…/etc/passwd或…/…/boot.ini,或构造一个指向系统关键文件的链接文件symlink(“/etc.../“表示当前目录,可以不写,”…/"表示当前目录的上一级目录,即当前目录的父目录。...或PathCchCanonicalizeEx 代替。...str.c_str(), str.size(), buffer, len); buffer[len] = '\0'; //添加字符串结尾 //删除缓冲区并返回值...CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL); buffer[len] = '\0'; //删除缓冲区并返回值
领取专属 10元无门槛券
手把手带您无忧上云