在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和儲存過程一比高下。