matlab调用c# COM+的的例子

chenhai20010201 2009-04-02 04:01:33
我们以下假设:

matlab版本:r2007a

dotnet:2005

com使用dotnet的服务化组件来生成并发布在机器192.168.10.69上,客户端使用matlab来调用这个组件。

1.使用dotnet vs2005来建立一个类库。关键代码如下:

User.cs:

using System;
using System.Collections.Generic;
using System.Text;
//添加com及数据库引用
using System.EnterpriseServices;
using System.Collections;
using System.Windows.Forms;

using System.Data.OleDb;
using System.Data;
//using System.Collections.Generic;
//这里是实现一个com应用,包含3个实体user,Catalogue,Article;分别表示用户、资料类别、资料
//此模块最终被编译成dll并作为com部署在服务器。并且被已经实现的被作为客户端的matlab脚本调用
//陈海2009/3/15
/*-------------------------------------------------
-----------------------------------------------------* */
namespace CharIdentifyCOM
{
[Transaction(TransactionOption.Required)]
//声明为服务器应用程序,还可以选择Library,表示为库应用程序



public class User : ServicedComponent
{
private string connectionString;
public User()
{
}
protected override void Construct(string s)
{
connectionString = s;
base.Construct(s);
}
[AutoComplete] //这就是一会儿我们要在客户端调用的方法
public string getUserName()
{
return "chenhai";
}
}

}
//注意您要添加引用 System.EnterpriseServices

Assembly.cs:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("CharIdentifyCOM")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("ztc")]
[assembly: AssemblyProduct("CharIdentifyCOM")]
[assembly: AssemblyCopyright("Copyright © ztc 2009")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(true)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("41dc3ec7-2b22-4f02-80eb-302c8930eb8c")]

// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
//[assembly: AssemblyKeyFile(@"..\..\CharIdentifyKey.snk")] //2005似乎已经取消了。请在菜单project->app properties->Signing->Sign the assembly中指定由sn生成的文件名

2.打开vs的命令行,给dll生成强名称

生成强命名的文件E:\master\term2\graduated_design\proj\dot_net_proj\CharIdentifyCOM\CharIdentifyC
OM\bin\Debug>sn -k CharIdentifyCOM.snk

Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.

Key pair written to CharIdentifyCOM.snk

3。注册com

E:\master\term2\graduated_design\proj\dot_net_proj\CharIdentifyCOM\CharIdentifyC
OM\bin\Debug>regsvcs /fc CharIdentifyCOM.dll
Microsoft (R) .NET Framework Services Installation Utility Version 2.0.50727.143
3
Copyright (c) Microsoft Corporation. All rights reserved.

WARNING: The assembly does not declare an ApplicationAccessControl Attribute. A
pplication security will be enabled by default.
Installed Assembly:
Assembly: E:\master\term2\graduated_design\proj\dot_net_proj\CharIdentif
yCOM\CharIdentifyCOM\bin\Debug\CharIdentifyCOM.dll
Application: CharIdentifyCOM
TypeLib: E:\master\term2\graduated_design\proj\dot_net_proj\CharIdentify
COM\CharIdentifyCOM\bin\Debug\CharIdentifyCOM.tlb

E:\master\term2\graduated_design\proj\dot_net_proj\CharIdentifyCOM\CharIdentifyC
OM\bin\Debug>

这是你可以通过"管理工具"看到这个com组件了

如果注册错误,可删除注册:regsvcs /u CharIdentifyCOM.dll

4。打开matlab r2007a,调用COM:

在matlab命令行做,

>> h=actxserver('CharIdentifyCOM.User','machine','192.168.10.69') %%生成到com的访问服务器句柄h

h =

COM.CharIdentifyCOM_User

>> get(h,'getUserName') %%调用com的方法

ans =

chenhai

>> release(h) %%释放h

>>

我们这里是最简单的验证,实际上,你可以在那个User类中实现更复杂的逻辑,比如访问数据库并返回给某个方法。我们也没有实现诸如COM安全等其他功能。自己试吧。




...全文
662 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jszhupeidong 2009-04-13
  • 打赏
  • 举报
回复
呵呵小弟受教了
最近我也在做MATLAB调COM,可以交流下吗
QQ21405589
jszhupeidong 2009-04-13
  • 打赏
  • 举报
回复
我按照你的做了下,为什么你不要访问接口就直接调用方法了啊?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧