?? vb調用vc寫的dll的幾種方式總結.txt
字號:
第一種類型:數值傳遞:
注意:在VB中,默認變量傳遞方式為ByRef為地址,而傳遞值就是用ByVal,還要注意在C++中,
int類型的變量是32位的,在VB中要用long型變量來配合。
C++:
extern "C" _declspec(dllexport) int __stdcall TestCalc(int source)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
return(++source);
}
.def文件
EXPORTS TestCalc
VB聲明:
Private Declare Function TestCalc Lib "Dll.dll" (ByVal Source As Long) As Long
調用:
Dim Tint As Long
Tint = TestCalc(45)
MsgBox Tint, vbExclamation
第二種類型:傳遞字符串,主要用于字符串返回或者處理。
C++:
extern "C" _declspec(dllexport) int __stdcall MidStr(CHAR * src,CHAR * dest)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
strcpy(dest,src+1);
return 0;
}
.def文件
EXPORTS MidStr
VB中聲明:
Private Declare Function MidStr Lib "Dll.dll" (ByVal src As String, ByVal dest As String) As Long
調用:
Dim i As Long, s As String * 255
tempstr = "Hello!World"
i = MidStr(tempstr, s) 或者 i = MidStr("Hello!World", s)
MsgBox s, vbExclamation
第三種類型:傳遞數組和變量指針,主要用于從dll中讀出大量數據
C++:
extern "C" _declspec(dllexport) int __stdcall TestByte(BYTE *p,int *length)
{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
*p=45;
*(p+1)=46;
*length=2;
return 0;
}
.def文件
EXPORTS TestByte
Private Declare Function TestByte Lib "Dll.dll" (ByRef src As Any, ByRef length As Long) As Long
VB調用:
Dim a(0 To 10) As Byte
Dim i As Integer, length As Long
i = TestByte(a(0), length)
MsgBox a(0) & " " & a(1) & vbCrLf & length, vbExclamation
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -