FB制作DLL给VB使用

FB制作DLL非常方便,这里做一个FB生成DLL给VB调用的例子。

1、需要导出的函数,要在末尾加Export,不加找不到入口点

{ Sub | Function } proc_name ( argumentlist ) [ As datatype ] Export

2、如果需要给VB或其他语言直接调用,则需要加上Extern "Windows-MS" ... End Extern,否则生成的函数末尾会有@4,@8等后缀。

3、数值类型可以直接给VB使用,而字符串使用时,需要注意,VB的字符串是BSTR,所以需要转换类型,输入数据可以使用zstring ptr指针,而输出时需要转BSTR,同时要使用SysAllocString来分配内存。具体实现代码如下:

'1、如果需要给VB直接调用,则需要加上Extern "Windows-MS" ... End Extern
'   如果给FB使用,不需要加
'2、需要导出的函数,需要加Export,不加找不到入口点

#cmdline "-x ../vb_project/dlltest.dll" '直接将DLL生成到VB工程目录下,省的手动复制
										
Extern "Windows-MS"
#include Once "windows.bi"

'使用BSTR的时候需要声明
#include Once "win/wtypes.bi"
#include Once "win/shlobj.bi"
#include Once "win/oleauto.bi"

'1、数值
Function fAdd(ByVal a As Long,ByVal b As Long) As Long Export 
	Return a + b
End Function

Function fSub(ByVal a As Long,ByVal b As Long) As Long Export 
	If a < b Then Return -1
	Return a - b
End Function

'2、字符指针 相当于C的 char *
Sub fPrint(ByVal s As ZString Ptr) Export 
	MessageBox NULL,s,"显示",MB_OK
End Sub

#define ver WStr("1.0.0")
Function fVersion() As BSTR Export 
	Return SysAllocString(Cast(BSTR,@ver))
End Function

End Extern 

4、在给VB使用时,需要将DLL放到工程目录下(方便调用),然后新建Module来声明DLL里的函数,声明如下:

Declare Function Add Lib "dlltest" Alias "fAdd" (ByVal a As Long, ByVal b As Long) As Long
Declare Function Dec Lib "dlltest" Alias "fSub" (ByVal a As Long, ByVal b As Long) As Long
Declare Sub domsg Lib "dlltest" Alias "fPrint" (ByVal s As String)
Declare Function ver Lib "dlltest" Alias "fVersion" () As String

界面如下:

FB制作DLL给VB使用_第1张图片

实现代码:

Private Sub Command1_Click()
    domsg "加法:" & Add(5, 10)
End Sub

Private Sub Command2_Click()
    domsg "减法:" & Dec(5, 10)
End Sub

Private Sub Command3_Click()
    domsg "减法:" & Dec(10, 5)
End Sub

Private Sub Command4_Click()
    domsg ver
End Sub

工程代码如下:

FB与VB代码工程例子

你可能感兴趣的:(FreeBASIC随记,freebasic,DLL,VB)