电竞比分网-中国电竞赛事及体育赛事平台

分享

VFB寫DLL給VB調(diào)用

 nxhujiee 2020-07-09
Function FF_WINMAIN(ByVal hInstance As HINSTANCEAs Long '程序入口函數(shù)
   'hInstance EXE或DLL的模塊句柄,就是在內(nèi)存中的地址,EXE 通常固定為 &H400000  DLL 一般不固定 
    '編譯為 LIB靜態(tài)庫時,這里是無任何用處 
   
    DLL 例題 ********  函數(shù)無需返回值
    DLL被加載到內(nèi)存時,不要執(zhí)行太耗時間的代碼,若需要耗時就用多線程。
          AfxMsg  "DLL被加載到內(nèi)存時 "

    EXE 例題 ********   
          AfxMsg  "EXE剛啟動 "
   如果這個函數(shù)返回TRUE(非零),將會結(jié)束該軟件。如果沒有啟動窗口,那么此函數(shù)過后,也會終止軟件。
   您可以在此函數(shù)做程序初始化。
   (這里的EXE、DLL表示自己的,無法獲取其它EXE、DLL入口和出口)
   
Function False   
End Function
Sub 
FF_WINEND(ByVal hInstance As HINSTANCE'程序出口,程序終止后的最后代碼。
   'hInstance EXE或DLL的模塊句柄,就是在內(nèi)存中的地址,EXE 通常固定為 &H400000  DLL 一般不固定 
   '編譯為 LIB靜態(tài)庫時,這里是無任何用處 
   
    DLL 例題 ********    
      卸載DLL,DLL被卸載,需要快速完成,不能用進程鎖。
      AfxMsg  "DLL被卸載時 
   
    EXE 例題 ********   
     程序即將結(jié)束,這里是最后要執(zhí)行的代碼,(:無法停止被退出的命運。
        AfxMsg  "EXE退出 "
   (這里的EXE、DLL表示自己的,無法獲取其它EXE、DLL入口和出口)
End Sub


'*************同文件夾里,有VB工程源碼,演示調(diào)用FB的DLL方法 **********************
'點擊頂部工具欄【齒輪】圖標,就編譯為DLL 了,
'函數(shù)后面加 Export 表示導(dǎo)出函數(shù),那樣VB里就可以定義使用了
'導(dǎo)出后,函數(shù)名全部自動變大寫,且在后面加符號 @0 @4 @8 等,@后面的數(shù)字是 1個參數(shù) *4
'=====================關(guān)鍵函數(shù)================
'--------------------------------------------------------------------------
Function BStrToString(nBStr As BStrAs String  '將VB里的字符串轉(zhuǎn)換為FB里使用的字符串
    
Dim As Long = Peek(Long,Cast(UInteger,nBStr- 4)
    
Dim ss As String String(L,0)
    
memcpy StrPtr(ss),nBStr,L
    Function ss
End Function
'--------------------------------------------------------------------------
Function StringToBStr(nStr As StringAs BStr  '將FB里的字符串轉(zhuǎn)換為VB里使用的字符串
  
Function SysAllocStringCast(WString Ptr, StrPtr(nStr'偽造 VB 字符串
End Function
'--------------------------------------------------------------------------
Function BStrToStringW(nBStr As BStrAs String  '將VB里的字符串轉(zhuǎn)換為FB里使用的字符串,用于字符數(shù)組
  '注意,假如字符串里包含 chr(0) 將會在此被截斷
  
Dim ss As String
  If 
nBStr <> Then
      
ss * CPtr(WString Ptr, nBStr)
  
End If
  Function 
ss
End Function
'--------------------------------------------------------------------------
Sub SetBstr(ByRef nBStr As BStr,nStr As String 修改VB字符串,用于字符數(shù)組
'必須是 ByRef ,不然修改不了nBStr,默認是 ByVal
    
If nBStr =Then 
        
'無字符
        
nBStr = SysAllocString(nStr'新增字符串
    
Else
        
'有字符
        
SysReAllocString(@nBStr,nStr'修改字符串
    
End If    
End Sub        
'=============================================
'警告!警告!警告! 在工程屬性里,必須去掉 支持GDI+(默認選中),不然VB軟件和VB的IDE會失去響應(yīng)。
'--------------------------------------------------------------------------
Function JiaFa(ByVal As Long ,ByVal As Long As Long Export  '參數(shù)全是數(shù)字例題
'ByVal 由于VB和FB默認表達不同,避免發(fā)生不一至的情況,前面的必須加個,和VB那邊一樣。
  
Return a + b
End Function
'--------------------------------------------------------------------------
Sub Dizi(ByRef As Long )Export'以地址傳來參數(shù)
    
a = 666
End Sub
'--------------------------------------------------------------------------
Sub LongShuZhu(ByVal As Long Ptr,ByVal As Long) EXPORT '處理VB的數(shù)組
'FB 和 VB 之間,處理數(shù)組的方式不同,因此無法直接傳數(shù)組
'只能以指針的方式處理
  
For As Long =To b - 1
    a[i] = Rnd * 10000
  Next
End Sub
'--------------------------------------------------------------------------
Function GetStr() As BStr Export  '返回字符例題
'直接將字符返回到VB里,由于VB與FB的字符內(nèi)存不同,必須用轉(zhuǎn)換
  
Dim As String 
  
a = "返dd回dd字dd符dd例dd題dd"
  Return StringToBStr(a)
End Function
'--------------------------------------------------------------------------
Function LenDuoStr(ByVal As BStr ,ByVal As BStr ,ByVal As BStr ,ByVal As BStr As Long Export  '處理VB發(fā)來的字符例題
'由于VB與FB的字符內(nèi)存不同,必須用轉(zhuǎn)換
  
AfxMsg BStrToString(a)
  
Return Len(BStrToString(bBStrToString(cBStrToString(d))
End Function
'--------------------------------------------------------------------------
Sub StrShuZhu(ByVal As BStr Ptr ,ByVal As Long) Export '處理VB的數(shù)組
'FB 和 VB 之間,處理數(shù)組的方式不同,因此無法直接傳數(shù)組
'只能以指針的方式處理
 
Dim bb As String 
  For 
As Long =To b - 1
    bb = BStrToStringW(a[i])
    
If Len(bbThen AfxMsg bb,"讀取字符"
    SetBstr a[i],Str(Rnd * 999 )
  
Next
End Sub 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多