c 写跨语言dll,C#写的dll跨语言调用

C#写的dll为非标准的windows下dll,故

一般其他语言不能直接调用,当然基于.net平台下的编程语言是可以调用,要让其他语言调用C#写的dll一般通过webservice服务或者是Com

方式。经过在网上找资料以及自身的实践发现可以通过以下方式在Delphi和VB语言中调用。

1.编写C#写dll,用VS新建一个类库项目TestDll,源码如下:

using System;

using System.Collections.Generic;

using System.Text;

using

System.Runtime.InteropServices;

namespace

TestDll

{

/*

1。所要导出的类必须为公有;

2。所有属性、方法也必须为公有;

3。要导出的属性、方法必须用接口方式;如果没有在接口中声明,即使该方法(属性)为公有,也不能正常导出到COM。但他们可以被别的.NET程序所使用;

4。所有的事件也必须用接口方式;

*/

public interface ITestClass

{

int Get(int a);

string GetString();

}

[ClassInterface(ClassInterfaceType.None)]

public class

TestClass:ITestClass

{

public int Get(int a)

{

return

++a;

}

public string GetString()

{

return

"test";

}

}

}

设置项目属性,选中项目-属性-应用程序-程序集信息,勾选"使程序集Com可见";属性-生成,勾选为com互操作注册。设置后重新生成项目,即会向系统注册此dll,Debug目录下会生成TestDll.dll和TestDll.tlb两个文件。

1350208483_9387.jpg

1350208496_1173.jpg

2.用Delphi新建一个应用程序,保存应用程序,

然后选择"Project"-"Import type

library",在弹出的对话框中选择上步生成的TestDll.tlb,并进行类名和输出目录等设置,点击“Create

unit”,即会创建一个Delphi的tlb文件,在应用程序窗体界面放置2个按钮。一个按钮采用引入tlb文件方式调用,引入生成的tlb文件,一个

按钮采用ole方式调用。

1350208746_9968.jpg

1350208842_1458.jpg

源码如下。

unit

Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,ComObj;

type

TForm1 = class(TForm)

btn1: TButton;

btn2: TButton;

procedure btn1Click(Sender: TObject);

procedure btn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1:

TForm1;

implementation

{$R

*.dfm}

uses

TestDll_TLB;

procedure

TForm1.btn1Click(Sender: TObject);

var

aClass:TTestClass;

begin

aClass:=TTestClass.Create(nil);

ShowMessage(IntToStr(aClass.Get(5)));

ShowMessage(aClass.GetString);

end;

procedure

TForm1.btn2Click(Sender: TObject);

var

t:Variant;

begin

t:=CreateOleObject(‘TestDll.TestClass‘);

ShowMessage(IntToStr(t.Get(5)));

ShowMessage(t.GetString);

end;

end.

编译运行,即可看到效果。采用tlb方式调用可以看到dll提供的方法,但操作步骤繁琐,而采用ole方式不能看到接口的定义但调用简单。

1350208849_3932.jpg          

1350208857_4740.jpg

3.在VB中调用该dll,用VB新建一个Exe程序,然后点击“工具”-“引用”,定位到TestDll.tlb文件,在窗体上放置一按钮,按钮事件源码如下:

1350208867_2638.jpg

Private Sub

CommandButton1_Click()

Dim o

Set o = CreateObject("TestDll.TestClass")

MsgBox o.Get(5)

MsgBox o.GetString

End Sub

编译运行即可看到效果。

1350208880_6585.jpg   

1350208874_4793.jpg

转自:http://blog.csdn.net/zhenghui1/article/details/8070152

原文:http://www.cnblogs.com/530263009QQ/p/3745333.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值