FB制作DLL给VB使用
2023-12-15 09:43:03
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
界面如下:
实现代码:
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
工程代码如下:
文章来源:https://blog.csdn.net/rainheart311/article/details/134997853
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!