C#Dllimport特性与”COM组件“调用非托管函数

C#Dllimport特性与”COM组件“调用非托管函数,第1张

非托管的是 不利用.net 生成的dll

引用 是针对托管的

你dll 必须有这个方法才行

static extern int abc()表示声明一个外部实现方法 abc

你的abc方法必须在dll中存在

还有dll不必须注册,注册就是让系统知道它在哪里以及一些信息,你自己指明位置跟注册一个效果

DLLimport支持的是非.net框架下面的dll 如C++ 这类编写的 用.net框架编写出来的dll 就可以直接引用啦

在c# 2005中编写com组件,供PB11调用实例,分享给你

c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。

1、c#2005中新建项目,类型为类库,项目名为AddCom确定。

配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)”

2、打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用

3、编写com组件会用到guid(全球唯一ID),编写com组件必须要用到。c#会默认生成一个放在AssemblyInfo.cs,如没有生成,网上下一个生成guid的软件,有很多呢。

4、c#中源代码如下,按如下方法编写代码后生成工程,/bin/release中得到AddCom.dll。

using System

using System.Collections.Generic

using System.Text

using System.Runtime.InteropServices

namespace AddCom

{

[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]

public interface AddComInterface

{

[DispId(1)]

int iadd(int a, int b)

}

[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]

[ClassInterface(ClassInterfaceType.None)]

public class AddComService : AddComInterface

{

public AddComService()

{

}

public int iadd(int a, int b)

{

int c = 0

c = a + b

return c

}

}

}

5、dos下利用 e:\regasm AddCom.dll 命令注册com组件,可以理解为非.net平台下的regsvr32注册dll组件。提示注册成功即可。

6、pb11中利用ole调用来调用com组件,注意,此com组件无法用create ole control的browse查看到,只能利用如下的方法直接动态调用。

integer li_a,li_b,li_total

//----------注册c#生成的com组件------------

OleObject ole_AddCom

ole_AddCom = Create OLEObject

li_rc = ole_AddCom.ConnectToNewObject("AddCom.AddComService") //AddCom为c#中namespace,AddComService为c#中namespace中的class

if li_rc <>0 then

MessageBox("ConnectToNewObject", string(li_rc) )

return

end if

//----------调用com组件中的函数--------------

li_total = ole_AddCom.iadd(li_a, li_b) //iadd为c#中namespace(AddCom为c)中class(AddComService为c)中的函数(iadd())

组件是要注册的,如注册组件:将目录内的aa.dll和cc.dll文件复制到C:\WINDOWS\system32目录内!运行 regsvr32 组件名,记住.dll也要写哦!组件注册成功后进入控制面板-管理工具-组件服务:打开后找计算机-我的电脑-COM+ 应用程序点击后右键属性打开,分别设置 :安全设置基本不需要修改,标示:使用交互式用户,基本也不用动!高级----〉设置 空闲时保持运行 !!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11290170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存