c# COM Interop 第二部分

COM Interop 第二部分:C# 服务器教程

Visual Studio .NET 2003       
            2(共 2)对本文的评价是有帮助 - 评价此主题

COM Interop 允许 COM 开发人员像访问其他 COM 对象一样轻松访问托管代码。本教程说明如何将 C# 服务器与 C++ COM 客户端一起使用。它还解释了下列活动:

  • 如何创建 C# 服务器
  • 如何创建 COM 客户端

该教程还简要说明了在托管和非托管组件之间自动应用的封送处理。

COM Interop 第一部分:C# 客户端教程显示使用 C# 与 COM 对象交互操作的基础知识,这是该教程的前提。有关两个教程的概述,请参见 COM Interop 教程

示例文件

请参见“COM Interop 第二部分”示例以下载和生成该教程所讨论的示例文件。

其他阅读材料

教程

该教程说明下列创建 C# 服务器的活动:

  • 如何使用接口和类上的 Guid 属性将其作为 COM 对象公开以及如何为 Guid 属性生成全局唯一标识符 (GUID)。
  • 如何使用 RegAsm 注册供 COM 客户端使用的 .NET Framework 程序以及从 .NET Framework 程序创建类型库(.tlb 文件)。

该教程还说明下列创建 COM 客户端的活动:

  • 如何导出托管服务器以及如何使用它们创建 COM 对象。
  • 如何将由 RegAsm 生成的 .tlb 文件导入到 COM 客户端,以及如何使用 CoCreateInstance 创建 .NET Framework coclass 的实例。
    注意   若要为导出到 COM 客户端的接口和 coclass 创建 GUID,请使用 Guidgen.exe 工具,此工具是作为 Visual Studio 的一部分交付的。Guidgen 使您可以选择 GUID 的表示格式,这样您就不必重新键入它。有关 Guidgen 的更多信息,请参见知识库文章 Q168318“XADM: Guidgen.exe Available Only for Intel Platforms”。知识库文章可以在 MSDN Library 中以及 Web 站点 http://support.microsoft.com 上找到。
示例

本示例由两个文件组成:

  • C# 文件 CSharpServer.cs,它创建 CSharpServer.dll 文件。.dll 用于创建 CSharpServer.tlb 文件。
  • C++ 文件 COMClient.cpp,它创建可执行客户端 COMClient.exe。
文件 1:CSharpServer.cs
// CSharpServer.cs
// compile with: /target:library
// post-build command: regasm CSharpServer.dll /tlb:CSharpServer.tlb

using System;
using System.Runtime.InteropServices;
namespace CSharpServer
{
   // Since the .NET Framework interface and coclass have to behave as 
   // COM objects, we have to give them guids.
   [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")]
   public interface IManagedInterface
   {
      int PrintHi(string name);
   }

   [Guid("C6659361-1625-4746-931C-36014B146679")]
   public class InterfaceImplementation : IManagedInterface
   {
      public int PrintHi(string name)
      {
         Console.WriteLine("Hello, {0}!", name);
         return 33;
      }
   }
}
文件 2:COMClient.cpp
// COMClient.cpp
// Build with "cl COMClient.cpp"
// arguments: friend

#include <windows.h>
#include <stdio.h>

#pragma warning (disable: 4278)

// To use managed-code servers like the C# server, 
// we have to import the common language runtime:
#import <mscorlib.tlb> raw_interfaces_only

// For simplicity, we ignore the server namespace and use named guids:
#if defined (USINGPROJECTSYSTEM)
#import "..\RegisterCSharpServerAndExportTLB\CSharpServer.tlb" no_namespace named_guids
#else  // Compiling from the command line, all files in the same directory
#import "CSharpServer.tlb" no_namespace named_guids
#endif
int main(int argc, char* argv[])
{
   IManagedInterface *cpi = NULL;
   int retval = 1;

   // Initialize COM and create an instance of the InterfaceImplementation class:
   CoInitialize(NULL);
   HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation,
               NULL, CLSCTX_INPROC_SERVER,
               IID_IManagedInterface, reinterpret_cast<void**>(&cpi));

   if (FAILED(hr))
   {
      printf("Couldn't create the instance!... 0x%x\n", hr);
   }
   else
   {
      if (argc > 1)
      {
         printf("Calling function.\n");
         fflush(stdout);
         // The variable cpi now holds an interface pointer 
         // to the managed interface.
         // If you are on an OS that uses ASCII characters at the 
         // command prompt, notice that the ASCII characters are 
         // automatically marshaled to Unicode for the C# code.
         if (cpi->PrintHi(argv[1]) == 33)
            retval = 0;
         printf("Returned from function.\n");
      }
      else
         printf ("Usage:  COMClient <name>\n");
      cpi->Release();
      cpi = NULL;
   }

   // Be a good citizen and clean up COM:
   CoUninitialize();
   return retval;
}
输出

可以用以下命令行调用可执行客户端:COMClient <name>,其中 <name> 表示要使用的任何字符串,如 COMClient friend

Calling function.
Hello, friend!
Returned from function.

在示例 IDE 项目中,将项目“属性页”中的“命令行参数”属性设置为需要的字符串(例如,“friend”)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "爱情"是每个人都很熟悉的词汇,它是人类情感世界中最重要的一部分。爱情是指一种深刻的感情连接和牵扯,涉及到亲密关系、关心、关注和支持。它不仅仅是指情侣之间的感情,也包括亲情、友情和社交关系等各种形式的爱。 爱情是人类社会的基石,它能为人们带来许多积极的影响和益处。首先,爱情能够满足人们的情感需求,给予他们温暖和安全感。爱情使人们感觉被理解、被接受和被关爱,这种情感连接能够增强个体的幸福感和满足感。 爱情还是人们相互支持和激励的资源。当人们陷入困境或遇到挑战时,有一个爱情伴侣或亲密朋友的支持可以鼓舞人们勇往直前,克服困难。他们可以相互扶持和启发,使彼此变得更加坚强和自信。 除了个人层面上的影响,爱情还对社会有着深远的影响。爱情能够建立稳定的家庭和社区,促进社会的凝聚力和和谐发展。一个充满爱的家庭可以培养健康的子女,为社会的未来做出贡献。 然而,爱情也有其困难和挑战。维持一段健康、稳定的爱情关系需要双方的努力和投入。沟通、理解、尊重和包容都是建立良好爱情关系的重要因素。同时,人们也必须学会处理冲突和解决问题,以保持爱情的持久和成长。 总之,爱情是人类生活中不可或缺的一部分。它给予人们希望、快乐和意义。爱情不只是感情的体验,更是一种责任和承诺。通过理解爱情的意义和艰辛,我们可以更好地建立和维系良好的人际关系,为自己和他人带来幸福和满足。 ### 回答2: "C" 是英文字母表中的第三个字母,也是代表数字的罗马数字"100"。在计算机科学领域,"C"通常指的是一种编程语言——C语言。 C语言是一种通用的高级编程语言,最初由丹尼斯·里奇于1972年开发。C语言以其简洁、高效、强大的特性而闻名,成为了许多其他编程语言的基础。 C语言的设计主要用于开发系统软件和应用程序,并被广泛用于操作系统、嵌入式系统、驱动程序、游戏开发和网络应用等领域。其语法和语义相对简单,易于学习和使用。 C语言的特点包括: 1. 语法简洁:C语言的语法相对简单,容易理解和使用,使得编写代码更加高效。 2. 可移植性:C语言在不同的操作系统和硬件平台上都有很好的移植性,可以在不同的环境中进行开发和使用。 3. 高效性:C语言的编译器能够将源代码直接编译为机器语言,执行速度快,占用资源少。 4. 灵活性:C语言为程序员提供了灵活性和可控性,在内存管理、指针操作等方面有较高的自由度。 5. 强大的库支持:C语言拥有丰富的库函数,开发者可以使用这些库函数来加速开发过程,简化代码编写。 总结来说,C语言是一种简洁高效、可移植性强的编程语言,广泛应用于计算机科学和软件开发领域。掌握C语言将帮助开发者更好地理解计算机底层原理和编程思维,为他们打开更多的职业机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值