首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中实现"out of proc"COM服务器需要做什么?

在C#中实现"out of proc"COM服务器需要进行以下步骤:

  1. 创建一个COM接口和类库项目。
  2. 在接口中定义所需的方法和属性。
  3. 在类库中实现这些接口。
  4. 使用Windows注册表工具(regasm.exe)注册COM组件。
  5. 在客户端应用程序中使用COM组件。

以下是一些具体的步骤:

  1. 创建一个COM接口和类库项目。

在Visual Studio中创建一个新的类库项目,并将其设置为COM可见。这可以通过右键单击项目,选择“属性”,然后转到“生成”选项卡并勾选“注册 COM 的输出”来实现。

  1. 在接口中定义所需的方法和属性。

在接口中定义所需的方法和属性,以便客户端应用程序可以使用它们。例如:

代码语言:csharp
复制
[ComVisible(true)]
[Guid("...")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyCOMServer
{
    [DispId(1)]
    string GetData();

    [DispId(2)]
    void SetData(string data);
}
  1. 在类库中实现这些接口。

在类库中实现这些接口,以便客户端应用程序可以使用它们。例如:

代码语言:csharp
复制
[ComVisible(true)]
[Guid("...")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyCOMServer")]
public class MyCOMServer : IMyCOMServer
{
    public string GetData()
    {
        return "Hello, world!";
    }

    public void SetData(string data)
    {
        // Do something with the data.
    }
}
  1. 使用Windows注册表工具(regasm.exe)注册COM组件。

使用Windows注册表工具(regasm.exe)将COM组件注册到Windows注册表中。这可以通过在命令提示符下运行以下命令来实现:

代码语言:txt
复制
regasm.exe /tlb:MyCOMServer.tlb /codebase MyCOMServer.dll

这将生成一个类型库文件(MyCOMServer.tlb),并将其注册到Windows注册表中。

  1. 在客户端应用程序中使用COM组件。

在客户端应用程序中,可以使用以下代码来实例化COM组件并调用其方法:

代码语言:csharp
复制
Type type = Type.GetTypeFromProgID("MyCOMServer");
IMyCOMServer comServer = (IMyCOMServer)Activator.CreateInstance(type);
string data = comServer.GetData();
comServer.SetData("Hello, COM server!");

这将实例化COM组件并调用其方法。注意,客户端应用程序需要引用类型库文件(MyCOMServer.tlb)才能使用COM组件。

总之,在C#中实现"out of proc"COM服务器需要创建一个COM接口和类库项目,定义所需的方法和属性,实现这些接口,使用Windows注册表工具注册COM组件,并在客户端应用程序中使用COM组件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

程序员级别鉴定书(.NET面试问答集锦)

in-procout-of-proc 之间的区别是什么? out-of-proc是基于什么技术实现的?...类 (Class): 可以被实例化,有状态,被继承时,继承类也不需要重新实现被继承类的方法。但是如果被继承类的方法中有abstract修饰的,继承类则需要实现这个方法。...In-proc 发生在一个进程之内, Out-of-proc 发生在不同进程之间。 out-of-proc是基于什么技术实现的?...页面中所有开启了ViewState的服务器控件会使用到它。 参考 元素是做什么的?它在 ASP.NET下是做什么用的?...服务器告诉客户端,需要需要一些服务器必要信息存成cookies保存在客户端,而每次客户端访问服务器时会将cookies的信息通过请求发送给服务器

1.8K70

.NET开发工程师的常见面试题

{tabs-pane label="C#"} C#的基本数据类型有哪些?...不能被继承,也不能被重写,但是创建类的实例时会首先调用其基类的无参数构造函数。 C#,运算符“?”和“??”的区别是什么? ?是和:结合在一起使用的,?...C#,用const和readonly修饰的字段有什么区别? const:表示常量,其修饰的值是在编译期间确定的,因此声明时只能通过常量表达式指定其值。...C#,ref和out修饰方法参数时有什么区别? ref和out都可以实现将一个指定的参数按照引用进行传递: ref参数传入方法之前必须进行初始化;而out参数传入方法之前可以不用初始化。...ref参数方法内部可以直接使用;而out参数方法内部不能直接使用。 ref参数方法内部可以使用也可以不使用;而out参数方法返回之前必须对其赋值。 C#,using有几种用法?

5.5K30
  • Attacking SQL Server CLR Assemblies

    本文中我将以Nathan Krik的CLR系列文章提到的CLRassembly)为基础进行拓展,同时我也会介绍如何创建、导入、导出以及修改SQL Server的CRL库去实现提权、命令执行以及持久化操作...Server修改导出的CLR DLL并更改现有的CLR程序集 使用自定义CLR SQL Server中提升权限 什么是SQL Server的自定义CLR程序集?...-ExportFolder c:temp | Format-Table -AutoSize DLL可以输出文件夹中找到,该脚本将根据每个服务器名称、实例和数据库名称动态构建文件夹结构 现在您可以使用您喜欢的反编译器查看源代码...对于本练习我们将修改之前从SQL Server导出的cmd_exec.dll 1、dnSpy打开cmd_exec.dll文件,左侧面板向下钻取直到找到"cmd_exec"方法并选择它,这将立即允许您查看源代码并开始寻找错误...2、接下来右键单击包含源代码的右侧面板,然后选择"Edit Method (C#)..." 3、根据需要编辑代码,然而在这个例子,我添加了一个简单的"后门",每次调用"cmd_exec"方法时都会向

    1.7K20

    Linux初级运维常用命令面试问题

    10、linux系统的/proc文件系统有什么用? 11、如何在/usr目录下找出大小超过10MB的文件? 12、如何在/home目录下找出120天之前被修改过的文件?...当aspell程序主要被其它一些需要拼写检查能力的程序所使用的时候,命令行作为一个独立运行的工具的它也能十分有效。 7、如何从命令行查看域SPF记录? 我们可以用dig命令来查看域SPF记录。...cat /proc/net/bonding/bond0 10、linux系统的/proc文件系统有什么用?...linuxtechi@localhost:~$ ll /etc | nl | tee /tmp/ll.out 以上例子,从ll输出可以捕获到 /tmp/ll.out 文件,并且同样屏幕上显示了出来...18、ll | awk '{print $3,"owns",$9}' 这条命令是在做什么? 这条ll命令会显示这些文件的文件名和它们的拥有者。 19、linux的at命令有什么用?

    3.8K50

    20条Linux命令面试问答

    问:1 如何查看当前的Linux服务器的运行级别?   答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。...当aspell程序主要被其它一些需要拼写检查能力的程序所使用的时候,命令行作为一个独立运行的工具的它也能十分有效。 问:7 如何从命令行查看域SPF记录?   ...答:   cat /proc/net/bonding/bond0 问:10 Linux系统的/proc文件系统有什么用?   ...linuxtechi@localhost:~$ ll /etc | nl | tee /tmp/ll.out   以上例子,从ll输出可以捕获到 /tmp/ll.out 文件,并且同样屏幕上显示了出来...问:19 :Linux的at命令有什么用?   答: at命令用来安排一个程序未来的做一次一次性执行。

    2.1K80

    手把手带你开发一款 IIS 模块后门

    总共实现了 3 个功能分别是执行 cmd,通过 C# 调用 powershell,执行 shellcode。...基本上我就写了这三个功能其他的比如文件上传远程下载等等还是日后来填坑吧 浅谈一下原理 .Net ,HttpModule 其实就是实现了 IHttpModule 接口的程序集。... IIS Http 请求会通过一系列 HttpModule,而在经过这些 HttpModule 时,这些 HttpModule 对 Http 请求具有完全的控制权。...而我们这时就可以根据这些 http 请求判断是否是后门请求如果是就触发后门,如果不是就什么也不做交给后面的模块,经过所有的 HttpModule 之后,它会被 HttpHandler 处理, HttpHandler...随便谈两句 明天整理一下放 git 上先放个链接,git 链接 https://github.com/WBGlIl/IIS_backdoor 1、文笔不太好写的就这样了还请大佬们多多包涵 2、其实这个项目也还有很多地方可以改进一下比如

    1.8K30

    dotnet 获取指定进程的输入命令行

    本文告诉大家如何在 dotnet 获取指定的进程的命令行参数 很多的程序启动的时候都需要传入参数,那么如何拿到这些程序传入的参数?...我找到两个方法,一个需要引用 C++ 库支持 x86 和 x64 程序,另一个都是C#代码,但是只支持 x64 程序 本文提供一个由 StackOverflow 大神开发的库拿到进程的命令行 使用下面的代码需要引用两个...C++ 的库,可以从 csdn 下载 使用下面的代码就可以拿到传入进程的参数,使用之前,需要在输出的文件夹里面包含 ProcCmdLine32.dll 和 ProcCmdLine64.dll 可以从...Console.WriteLine($"{process.ProcessName} {GetCommandLineOfProcess(process)}"); } 代码请看 https://github.com...++ 的库,看起来不清真,下面通过全部 C# 的代码 public static string GetCommandLineOfProcess(int processId)

    1.2K20

    GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

    C# 调用 C 语言的函数,然后 C 语言执行到一些步骤后, C 语言函数调用 C# 的函数。这个 ARM64 的机器下,是正常的,例如树莓派,华为的鲲鹏服务器等。...# 系统日志 cat /var/log/syslog 刚开始时,大佬提示可能是内存已被回收,函数等没有使用静态来避免 gc 回收,可能在 C 回调之前,C# 的那部分内存就以及回收了。...GDB 调试启动 .NET 程序 执行以下命令即可启动 .NET Core runtime: gdb dotnet gdb 执行 start 启动程序。....so 文件剥调试信息 linux, strip 命令具体就是从特定文件剥掉一些符号信息和调试信息,可以使用以下步骤的命令,将调试信息从 .so 文件剥出来。...实践证明,要使用 C# 调用 C 语言的代码,或者回调,要多掌握 C# 的不安全代码和 ref 等写法~~~ 事实证明,当出现无法解决的问题时,不如紧紧抱住大佬的大腿比较好~~~ 推一波 Jexus:

    1.3K30

    SQL Server存储过程多角度介绍建议收藏

    大家好,又见面了,我是全栈君 什么是存储过程: 存储过程(Procedure)类似于C#语言中的方法,它是SQL语句和控制流语句的预编译集合。...存储过程创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。 类似于C#的类库,SQL Server 提供了一些预编译的存储过程,这些存储过程称为“系统存储过程”。...2>允许更快地执行 如果某操作需要大量的T-SQL代码或需要重复执行,存储过程将比T-SQL批处理代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程内存的版本。...3>减少网络流量 创建使用存储过程后,一个需要数百行T-SQL代码的操作,由一条执行该过程代码的单独语句就可实现,而不需要在网络中发送数百行代码 4>可作为安全机制使用 即使对于没有直接执行存储过程语句的权限的用户...存储过程名 创建带输入参数的的存储过程: 输入参数:可以调用时向存储过程传递参数,此类参数可用来存储过程传入值。

    1.3K10

    c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

    11、C#中有没有静态构造函数,如果有是做什么用的?   12、C#如何实现多态?   13、什么是反射?如何实现反射?   14、请解释流与文件有什么不同?   ....;   11、C#中有没有静态构造函数,如果有是做什么用的?   有。静态构造函数用于初始化类。创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。...静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件写入项。   12、C#如何实现多态?   ...也就是由重载和重写实现多态。重载一般是同一类的一组同名方法,但签名。重写主要是继承中体现,就是基类定义方法并在派生类中使用新实现重写它们。   13、什么是反射?如何实现反射?   ...私有程序集:   (1)默认情况下,C#程序编译为私有程序集。   (2)需要放在应用程序所在的文件夹。   (3)程序集的名称应用程序应当是唯一的。

    1.9K20

    使用C#实现网站用户登录

    我们写灌水机器人、抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录。那么怎么用C#来模拟一个用户的登录拉?要实现用户的登录,那么首先就必须要了解一般网站是怎么判断用户是否登录的。...HTTP协议是一个无连接的协议,也就是说这次对话的内容和状态与上次的无关,为了实现和用户的持久交互,网站与浏览器之前刚建立会话时将在服务器内存建立一个Session,该Session标识了该用户(浏览器...刚建立会话时浏览器向服务器的请求中将不包含SessionIDCookie服务器就认为是一个全新的会话,从而在服务器上分配一段内存给该Session用,同时将该Session的IDHttp Header...成功登录后,接下来我们只需要每次发送请求是跟上该Cookie,服务器就认为是登录的用户操作了,接下来就可以随便灌水、Download资源了,具体要做什么就大家自己弄了,只需要在IE操作一篇,抓包分析出来...,用C#实现同样的发包就OK!

    1.2K30

    SQL Server 存储过程_mysql存储过程教程

    **什么是存储过程:** 存储过程(Procedure)是一组为了完成特定功能的Sql语句集合,相当于C#的方法,只编译一次,经编译后存储在数据库,用户可以通过制定的存储过程名称并给出所需参数来执行...存储过程可以包含逻辑控制语句和数据操纵语句,它可以接收参数,输出参数,返回单个,多个结果集和返回值。...安全 用户无需使用写任何Sql语句去执行存储过程,防止了Sql注入攻击 可维护性 一组需求改变,修改存储过程即可再次重复调用 存储过程缺点: 不可移植性 每种数据库的内部编程语法都不太相同,当你的系统需要兼容多种数据库时最好不要用存储过程...--调用存储过程 select @p 修改(删除)存储过程 alter proc proc_name as begin   --sql语句 end   --删除存储过程 drop proc proc_name...,@countye out,@re out select @countsum,@countye,@re VS调用存储过程实现分页: private int a = 1;//第几页 private int

    5.5K30

    人人都值得学一点PowerShell实现自动化(6)自动化微软系产品

    PowerShell之所以强大,在于其是面向对象的语言 DOS命令和CMD命令,都是一条命令执行一个过程,是面向过程的调用方式,而PowerShell之所以敢称作Power,就是其比一般地Shell...实现自动化过程的前提,需要对本身Sqlserver的功能有足够熟悉才能发挥其作用,就如使用OFFICE软件一样,如果对OFFICE软件的自身的功能、界面的操作都不熟悉,其实使用VBA来自动化,也产生不了多少价值...在此篇文章的代码,分别分享C#和PowerShell的代码,笔者的书写顺序是先写了C#代码,再写PowerShell代码,调用dotNET类库上,PowerShell因为没有命名空间的概念,书写代码没有...关键的SMO对象是Transfer对象,同时如果远程访问其他服务器时,不能简单localhost用Windows认证登录那么省事,用Sqlserver认证体系时,需要构造ServerConnection...结语 本篇带给大家一些PowerShell能够做什么的视野性扩展,当然它能够做什么时如果有更佳的方式来完成,也并非完全需要硬套PowerShell来完成。

    1.8K10

    Google招聘Linux工程师的20个面试问题及答案

    1.如何查看当前的Linux服务器的运行级别? 答: 'who -r' 和 'runlevel' 命令可以用来查看当前的Linux服务器的运行级别。 2.如何查看Linux的默认网关?...当aspell程序主要被其它一些需要拼写检查能力的程序所使用的时候,命令行作为一个独立运行的工具的它也能十分有效。 7.如何从命令行查看域SPF记录?...答: 10.Linux系统的/proc文件系统有什么用?...以上例子,从ll输出可以捕获到 /tmp/ll.out 文件,并且同样屏幕上显示了出来。...18.ll | awk '{print $3,"owns",$9}' 这条命令是在做什么? 答: 这条ll命令会显示这些文件的文件名和它们的拥有者。 19.Linux的at命令有什么用?

    2.1K70

    .NET面试题系列 - 写在前面

    如果你也知道,并且还可以解释清楚,为什么需要双重锁检查,面试官会觉得很满意。如果你甚至还可以提一句,很多依赖注入工具,只需要一个函数就能保证对象全局都是单例的,例如autofac就有这个功能。...C#所有的数据结构都基于IEnumerable,我曾经遇到一个面试官问我IEnumerable是做什么的,怎么实现一个IEnumerable。个人认为,后一个问题有点强人所难。...C#,CLR提供了线程池管理线程,不过我们不需要直接和它进行沟通,我们可以通过任务间接的和它沟通。线程有几种状态:start,工作,被阻塞和abort。它们之间的互相转化构成了同步的几种方式。...对于金融交易系统,需要特别关注一下SignalR。它集成了服务器和用户进行通讯的几种方式,从常规的轮询,到服务器主动发送讯息,以及现在常用的WebSocket。...漫漫的学习过程,我们不仅要打牢基础,还要时刻关注新技术的动向。C# 6推出来一段时间了(虽然其中并没有什么重大的改进),C# 7也马上就要问世。

    1.1K20

    Unity Android Plugin开发指南

    封装代码可以是C#文件,或者dll文件,都放在/Assets,若是dll,需Unity C#工程添加此dll依赖。...传递long类型的值,该问题在Unity 5已经修复 有关AndroidJavaProxy的实现附录中有详细介绍 UnityPlayer.UnitySendMessage 这需Android工程添加...该设计将Java代码的类及其结构反射到C#代码,至于该类的细节(比如继承关系、接口实现等)将被忽略,因为需要反射的都是暴露给用户的API接口,用户不应该关心这些细节。 如下图所示: ?...如果要从C#反射到Java,可以参考本节进行扩展。 反射的实现 开始之前,我们需要明确哪些类需要反射。...注意: 如果使用Xamarian进行C#代码的调试,可能无法找到【Attach to process】,这时候需要下载这个插件: http://forum.unity3d.com/threads/unity-add-ins-for-monodevelop-xamarin-studio

    8.1K80

    Python subprocess与命令行交互

    这对于同步运行子进程的 api 来说是很难实现的,因此必须查看一些底层级别的 api。 最近做的项目安卓 shell 里面有些就需要这个。需要用 adb shell xxx 和安卓设备交互。...虽然可以使用 subprocess.run一个线程启动一个子进程,并在另一个线程与其交互。 但是,当完成了子进程之后,要完全终止它将变得非常棘手。...因此,在看来,不建议小于一行的块读取 stdout。 真的,千万别这么做。...最好是向子进程发送某种类型的“ exit”命令(对于 Python 解释器而言是 quit()) ; 这里的 terminate 是为了演示在其他选项不可用时必须做什么。...完整的代码示例在下里; 关键的部分是这个插座读取功能,意味着它自己的线程运行: https://github.com/python/cpython/blob/master/Lib/socketserver.py

    7.5K22
    领券