在C#中调用VFP的DLL文件 --COM编程一例
2007-02-15 18:32
267 查看
在C#中调用VFP的DLL文件 --COM编程一例
这过程个非常简单,分为两步:
1.在VFP中建立公共类
语法如下:
DEFINE CLASS ClassName1 AS ParentClass [OF ClassLibrary] [OLEPUBLIC]
[IMPLEMENTS cInterfaceName [EXCLUDE]
IN TypeLib | TypeLibGUID | ProgID ]
[[PROTECTED | HIDDEN PropertyName1, PropertyName2 ...]
[[.]Object.]PropertyName = eExpression ...]
[ADD OBJECT [PROTECTED] ObjectName AS ClassName2 [NOINIT]
[WITH cPropertylist]]
[[PROTECTED | HIDDEN] FUNCTION | PROCEDURE Name[_ACCESS |_ASSIGN]
([cParamName [AS type] [@]]) [AS type]
[HELPSTRING cHelpString] |
THIS_ACCESS(cMemberName)
[NODEFAULT]
cStatements
[ENDFUNC | ENDPROC]]
[PEMName_COMATTRIB = nFlags | DIMENSION PEMName_COMATTRIB[5]
[PEMName_COMATTRIB[1] = nFlags
PEMName_COMATTRIB[2] = cHelpString
PEMName_COMATTRIB[3] = cPropertyCapitalization
PEMName_COMATTRIB[4] = cPropertyType
PEMName_COMATTRIB[5] = nOptionalParams]]
ENDDEFINE
具体说明自己查下MSDN好了,各参数都有详细的说明,如(类A):
DEFINE CLASS f1 AS custom OLEPUBLIC &&必须声名为公共
FUNCTION mymethod (parm1 AS integer , parm2 AS string) AS interger
RETURN parm1
ENDFUNC
ENDDEFINE
应将此类声名为公共类,否则无法编译为DLL文件,编译时根据需要选择单线程还是多线程
2.在VS的C#工作中调用
在解决方案资源管理器中的“引用”上面右键,弹出的快捷菜单中选择“添加引用”,然后在对话框中“浏览”,选中刚才编译的DLL文件确定即可,编译器会自动把它修改并复制到程序所在文件夹。
这时会发现引用中多了一个新项NewItem(根据你的VFP工程的名来的),在调用些类的文件的引用处添加:using NewItem;
这样,在C#中就可以直接用这个类了,只是类名后要加“Class”,实例化的方法是:
ClassName1 VFPClass = new ClassName1();
如上面这个类A:
f1Class myClass = new f1Class();//实例化
int i = myClass.mymethod( 9 , "asdfasdf" )//调用类中的函数,用i接收返回值
当然也可以在不using的情况下直接NewItem.ClassName1 VFPClass = new NewItem.ClassName1();
好了,调用COM原来如此简单!^_^
这样是不是使C#使用VFP表的功能和效率大大提高了呢?虽然还不敢和SQL SERVER和储存过程一比高下。
这过程个非常简单,分为两步:
1.在VFP中建立公共类
语法如下:
DEFINE CLASS ClassName1 AS ParentClass [OF ClassLibrary] [OLEPUBLIC]
[IMPLEMENTS cInterfaceName [EXCLUDE]
IN TypeLib | TypeLibGUID | ProgID ]
[[PROTECTED | HIDDEN PropertyName1, PropertyName2 ...]
[[.]Object.]PropertyName = eExpression ...]
[ADD OBJECT [PROTECTED] ObjectName AS ClassName2 [NOINIT]
[WITH cPropertylist]]
[[PROTECTED | HIDDEN] FUNCTION | PROCEDURE Name[_ACCESS |_ASSIGN]
([cParamName [AS type] [@]]) [AS type]
[HELPSTRING cHelpString] |
THIS_ACCESS(cMemberName)
[NODEFAULT]
cStatements
[ENDFUNC | ENDPROC]]
[PEMName_COMATTRIB = nFlags | DIMENSION PEMName_COMATTRIB[5]
[PEMName_COMATTRIB[1] = nFlags
PEMName_COMATTRIB[2] = cHelpString
PEMName_COMATTRIB[3] = cPropertyCapitalization
PEMName_COMATTRIB[4] = cPropertyType
PEMName_COMATTRIB[5] = nOptionalParams]]
ENDDEFINE
具体说明自己查下MSDN好了,各参数都有详细的说明,如(类A):
DEFINE CLASS f1 AS custom OLEPUBLIC &&必须声名为公共
FUNCTION mymethod (parm1 AS integer , parm2 AS string) AS interger
RETURN parm1
ENDFUNC
ENDDEFINE
应将此类声名为公共类,否则无法编译为DLL文件,编译时根据需要选择单线程还是多线程
2.在VS的C#工作中调用
在解决方案资源管理器中的“引用”上面右键,弹出的快捷菜单中选择“添加引用”,然后在对话框中“浏览”,选中刚才编译的DLL文件确定即可,编译器会自动把它修改并复制到程序所在文件夹。
这时会发现引用中多了一个新项NewItem(根据你的VFP工程的名来的),在调用些类的文件的引用处添加:using NewItem;
这样,在C#中就可以直接用这个类了,只是类名后要加“Class”,实例化的方法是:
ClassName1 VFPClass = new ClassName1();
如上面这个类A:
f1Class myClass = new f1Class();//实例化
int i = myClass.mymethod( 9 , "asdfasdf" )//调用类中的函数,用i接收返回值
当然也可以在不using的情况下直接NewItem.ClassName1 VFPClass = new NewItem.ClassName1();
好了,调用COM原来如此简单!^_^
这样是不是使C#使用VFP表的功能和效率大大提高了呢?虽然还不敢和SQL SERVER和储存过程一比高下。
相关文章推荐
- 将C语言编译成DLL并用C#进行调用以及关于从C#传输中文路径到C的DLL中打开文件的问题
- C#调用DLL文件时参数对应表
- 在VS2010上使用C#调用非托管C++生成的DLL文件
- c# 创建DLL,动态加载dll文件,并调用其中的方法(转自CFEI.NET)
- C#调用DLL文件时参数对应表
- C#调用DLL文件时参数对应表
- C#实现反射调用动态加载的DLL文件中的方法
- VS2010 C#调用C++ DLL文件
- C#程序实现动态调用非托管的DLL文件
- C#编写dll库文件并注册为COM组件供其他语言(如PHP等)调用
- 在非托管的 VC++2005 中调用托管的 C# DLL 文件
- 存储过程调用C#编写的DLL文件
- C#实现反射调用动态加载的DLL文件中的方法
- C#调用matlab生成的dll文件问题
- 通过 VB5 创建 ActiveX DLL 文件并用 ASP 调用一例
- C#调用C++的DLL文件
- C#调用DLL文件时参数对应表
- asp.net网页中调用c#写的dll文件
- C#调用DLL文件时参数对应表
- C#.NET常见问题(FAQ)-如何将cs文件编译成dll文件 exe文件 如何调用dll文件