程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> vc6-如何用VC6編一個聯接SQL2000數據庫的句柄,並編譯成.fll的格式,給VFP9.0調用!

vc6-如何用VC6編一個聯接SQL2000數據庫的句柄,並編譯成.fll的格式,給VFP9.0調用!

編輯:編程綜合問答
如何用VC6編一個聯接SQL2000數據庫的句柄,並編譯成.fll的格式,給VFP9.0調用!

如何用VC6編一個聯接SQL2000數據庫的句柄,並編譯成.fll的格式,給VFP9.0調用,只要求一個簡單的實例,大俠高手們,高台貴手一下!

最佳回答:


創建用於VFP的動態庫(FLL格式)

一、使用VC98創建FLL文件的步驟:
1. 打開VC98,並在VC中新建空項目(Win32 Dynamic-Link Library動態庫)
2. 添加或編寫源代碼文件,如格式為*.C,不能用*.cpp表示的文件。參考例子Hello.c的內容如下:
#include
void hello(ParamBlk *parm) // the function definition
{
_PutStr("\nHello, World!\n"); //print the message
}
Example(ParamBlk *parm)
{
// 通過使用 #define 快捷方式使得 paramBlk 結構易於管理
#define p0 (parm->p[0].val)
#define p1 (parm->p[1].val)
// 確保有足夠的內存
if (!_SetHandSize(p0.ev_handle, p0.ev_length + p1.ev_length))
_Error(182); // "內存不足"
// 鎖定句柄
_HLock(p0.ev_handle);
_HLock(p1.ev_handle);
// 將句柄轉換為指針並確保串是由 null 作終止符
((char *)_HandToPtr(p0.ev_handle))[p0.ev_length] = '\0';
((char *)_HandToPtr(p1.ev_handle))[p1.ev_length] = '\0';
// 用 API 函數 _StrCpy 連接串
_StrCpy((char *)_HandToPtr(p0.ev_handle) + p0.ev_length,
_HandToPtr(p1.ev_handle));
// 將已連接的串返回給 Visual FoxPro
_RetChar(_HandToPtr(p0.ev_handle));
// 解除句柄鎖定
_HUnLock(p0.ev_handle);
_HUnLock(p1.ev_handle);
}

FoxInfo myFoxInfo[] = {
{"HELLO",(FPFI) hello, 0, ""},
{"STRCAT", Example, 2, "CC"},
};
FoxTable _FoxTable = {
(FoxTable *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
其中紅色部分為函數定義,可定義多個函數;而紫色部分為導出的函數說明(函數名,內部函數名,參數個數,參數類型),若有多個函數,則相應地要寫幾個。
3. 項目設置(很關鍵,設置不對會導致編譯錯誤)
點擊項目(Project)中<設置(Settings)>,
(1)在C++選項卡中,刪除編譯器開關參數中的 /GZ。
(2)在Link選項卡中,添加WINAPIMS.LIB和msvcrt.lib(建議msvcrt.lib放在最後)即可成功

二、使用VFP命令
在VC源代碼文件中的格式如下:
_Execute(“命令”)
注意命令中變量的值與VC中的同名變量無關.
三、調試FLL:
可以在.C 源代碼中使用_BreakPoint()命令啟動調試器,然後,然後可逐語句進行調試。
1. .C 源代碼中包含 _BreakPoint() 函數。
2. 啟動調試器。
3. FoxPro 從調試器中啟動。
4. 加載庫並調用函數。
5. 逐句通過 C 源代碼並隨後返回到 FoxPro。
6. 退出 FoxPro。
7. 退出調試器。
四、在VFP中使用FLL動態庫
啟動 Visual FoxPro 程序後並發出 ' SET LIBRARY to < DLL 文件 >
使用函數與使用系統函數一樣,沒有兩樣。
本文難免有不妥之處,請來郵告知, 以便共同進步。來信請郵:[email protected].
2010-12-12

創建DLL函數(32位動態庫DLL格式):
創建DLL格式的動態庫,網絡上介紹的相關資料很多,筆者不想多談。注意,在利用VC開發並編譯時,應使用__cdecl*,否則無法使用.
導出的函數應使用以下格式:
extern "C" __declspec(dllexport) int sy(int x, int y);
或extern "C" int __declspec(dllexport) sy(int x, int y);
導出符號 函數類型 函數名(參數類型名稱)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved