1.vb再调用C++的dll时可以采用以下方式把dll的接口引入vb(ByRef为地址应用,对应c++的中的引用和指针)。在引入时函数名称和形参需要保持一致
2.生成完成之后把dll和exe放在同一级目录即可运行,如果提示找不到test.dll,先检查dll位置是否正确,如果位置没有问题,那么检查dll和exe是否同为X64或者x86,如果还是不行需要检查dll中是否调用其他的一些dll可以复制到同级目录去。
Public Declare Function MCF_UnCoInitialize Lib "test.dll" () As Integer
如果其函数有存在结构体,必须先在vb中同样定义一个对应的结构体,结构体中的参数最好全部用基类型。例如下面
Public Declare Function MCF_Enumerate_Card Lib "test.dll" (ByRef stu As stuCard) As Integer '引入形参为结构体的函数
'c++结构体在vb中声明的对应结构体
<StructLayout(LayoutKind.Sequential)>
Public Structure CardPara
Public iCount As Short '卡的总数
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> '声明C++中对应的数组
Public iCardID As Short() '卡索引
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)>
Public iCardType As Short() '-1,0 为,1为‘
End Structure
结构体在C++中对应的代码为
typedef struct MFC_CARD_PARA
{
short iCount; //卡数量
short iCardID[4]; //卡号
short iCardType[4]; //卡的种类 0为 卡,1为卡
MFC_CARD_PARA()
{
iCount=0;
for (int var = 0; var < 4; ++var)
{
iCardID[var]=-1;
iCardType[var]=-1;
}
}
}CardPara;