📄 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 + -