开发文章

C#开发多语言可用的类库

 C#开发多语言可用的类库指的是 C#开发VB6使用的DLL、C#开发VC使用的DLL、C#开发Delphi使用的DLL等等

      C#编译出来的DLL与VC、VB、Delphi等这些工具编译出来的完全不一样,C#生成的DLL不是独立运行的程序,是某个程序的一个部分,只能由所属的程序(Microsoft .NET Framework )调用,Visual C#编译器生成的托管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码。

         网上搜出来的方法也不尽人意,第一种是:对工程进行修改使其支持托管代码。第二种是 :C#生成DLL端编译成COM接口。

直接上我使用的方法,也是基于COM的,但方法很简单!!!!:)

C# 工程

新建一个类库,然后在CS文件中导出你想提供给外部的接口,记得在文件最上面加 using System.Runtime.InteropServices;

导出接口的代码如下,下面的代码只导出了一个 Start  方法,代码中的GUID不能一样,要不编译会不通过

C# Code复制内容到剪贴板
  1. namespace cs_com_class  
  2. {  
  3.     [Guid("a83f8440-340f-45cf-b76c-4d2da0352590")]  
  4.     public interface ICSharpinterface  
  5.     {  
  6.         void Start(string strPluginPath);  
  7.     }  
  8.   
  9.    [Guid("a83f8440-340f-45cf-b76c-4d2da0352591"), ClassInterface(ClassInterfaceType.None)]  
  10.     public class CICSharpinterface : ICSharpinterface  
  11.     {  
  12.        public CICSharpinterface()  
  13.         {  
  14.   
  15.         }  
  16.   
  17.         public void Start(string strPluginPath)  
  18.         {  
  19.             MessageBox.Show(strPluginPath, "这是C#接口弹出的");  
  20.         }  
  21.     }  
  22. }  

 再对工程进行两项设置,

 1.jpg

                                     图 1

如图1所示,选中 Application选项卡,然后点击 Assembly Information按钮,打开一个对话框,如图2

2.jpg

                                                        图  2

Make assembly COM-Visible 复选框 钩选上,点OK按钮。

按图3方法,再选中 Build选项卡,在这里进行一项设置,将 output中的Register for COM interop复选框选中,保存参数设置编译这个C#工程

3.jpg

                                                               图 3

 

最后编译完成,查看生成目录是不是有一个后缀tlb的文件,示例中是cs_com_class.tlb

如果没有,请重新按上面方法进行C#设置,编译

最终C#方面就完成了,是不是很简单。

这里只介绍VC工程调用,VB、Delphi、C++Builder等开发工具,只需要引用 tlb 文件,按开发工具的使用方法调用就可以

//在你需要调用的头文件中引用C#的DLL  tlb的文件
#import "cs_com_class.tlb" no_namespace named_guids

调用方法如下

折叠C/C++ Code复制内容到剪贴板
  1. ICSharpinterfacePtr m_IPluginManageSharpPtr;  
  2.   
  3. int _tmain(int argc, _TCHAR* argv[])  
  4. {  
  5.     ::CoInitialize(NULL);  
  6.     m_IPluginManageSharpPtr.CreateInstance(CLSID_CICSharpinterface);  
  7.   
  8.     m_IPluginManageSharpPtr->Start(_bstr_t("VC传入的值,演示VC调用C# 类库"));  
  9.     ::CoUninitialize();  
  10.   
  11.     return 0;  
  12. }  

VC使用接口很简单,只需要在C#接口名后加上Ptr就是VC可以使用的智能指针,CLSID_CICSharpinterface  也是有规则的相信你能看得出来:)

在无开发环境的电脑上使用C# DLL需要用 RegAsm.exe 注册,RegAsm.exe aaa.dll类似这样的方法

RegAsm.exe可以在你的开发工具安装目录下搜索得到的。32位使用32位版,64位使用64位版

在此,VC调用C# DLL的方法就介绍完了,是不是很简单啊!!还有不明白的可以下载文章配套代码。

感谢 磐 实 支持 磐实编程网 原文地址:
http://www.panshy.com

文章信息

发布时间:2013-01-27

作者:磐 实

发布者:aquwcw

浏览次数: