引用 是针对托管的
你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+ 应用程序点击后右键属性打开,分别设置 :安全设置基本不需要修改,标示:使用交互式用户,基本也不用动!高级----〉设置 空闲时保持运行 !!欢迎分享,转载请注明来源:内存溢出
评论列表(0条)