VB 版 (精华区)
发信人: xiangchu (天歌), 信区: VisualBasic
标 题: 作一个简单的DLL
发信站: 紫 丁 香 (Tue Aug 31 15:09:16 1999), 转信
1。生成DLL
用VC6生成MFC AppWizard(dll)工程。设Project Name为oneDll
I.在oneDll.cpp中加入自定义函数。
int Message(LPCTSTR strTest)
{
MessageBox(NULL, strTest, NULL, MB_ICONEXCLAMATION);
return 1;
}
II. 在oneDll.h中加入函数声明。
int Message(LPCTSTR strTest);
III. 在oneDLL.def文件中的EXPORTS后加入函数名Message
EXPORTS
Message //所加代码
IV.编译连接,生成oneDll.dll. 方便起见,
将其拷入Windows的System目录中(我还把它放在了"C:\temp"下,后面用)。
这样,在Win32应用程序中就可以使用这个DLL了。
2。在VC中使用
用VC6生成MFC AppWizard(exe)工程。设Project Name为testDll
I.在TestDllView.h 中加入声明:
HINSTANCE handlerDLL = NULL;
typedef int(* MESSAGE)(LPCTSTR cstrTest);
MESSAGE Message;
II.在Menu中加入DLL->DIRECT_DLL,然后在Class Wizard生成的OnDllDirect函数
中加入代码。
void CTestDllView::OnDllDirect()
{
handlerDLL = LoadLibrary("OneDLL.DLL");//重要
if (handlerDLL == NULL)
{
MessageBox("The OneDLL.Dll cannot be loaded");
return;
}
Message = (MESSAGE)GetProcAddress(handlerDLL, "Message");//重要
CString strTest("test of augument");
Message(strTest);
}
III.编译连接运行就可以测试所建的DLL了。
3。在VB中使用更为简单
I.在module1中声明:
Public Declare Function Message Lib "c:\temp\oneDll.dll"
_ (ByVal X As String) As Integer
II.设Form1上加了一个Command1.那么
Private Sub Command1_Click()
On Error Resume Next
'上面一句是可能函数参数类型声明不对,出现
'Bad DLL calling convention (Error 49)的错误,那位大侠帮看一下
'只是为了学用DLL,可以忽略这个错误
Message "vb test"
End Sub
III.运行就可以测试了。
3.其他Win32应用程序。比如我常用的桌面地理信息系统(GIS)ArcView
中的Avenue宏语言中可以如下使用:
aDll = Dll.Make("c:\temp\oneDll.dll".asFileName)
Mess = DllProc.Make(aDll, "Message", #DLLPROC_TYPE_INT32,
{#DLLPROC_TYPE_STR})
theWinHandle = DLL.GetAVWindowHandle
DLL.SetRefresh(true)
Mess.Call({"TEST IN ARCVIEW"})
参考文献:
刘松海等,Visual C++ 5.0编程指南,国防工业出版社,1998, 302-317
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.228.152]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.933毫秒