Visual C++ 编写供 VB.Net调用的DLL

跟我一样,很多初学者确实很难编写出如题的DLL,即使编写出来也经常在调用过程中出现各种问题。我根据摸索写出了一个DLL,编译和调用代码获得通过。

以下举例简单说明,具体还有很多问题我也待继续研究。

 

1.用Visual C++ 新建一个Win32控制台 DLL项目(记得打钩空项目) 如:MyDll1

2.在头文件添加 Mydll1.h

#pragma once 
#include <iostream>
//函数原型
int __stdcall Add(int a, int b);
void __stdcall  ShuChu();

3.在源文件添加 Mydll1.cpp

#include "MyDLL1.h"

using namespace std;

int __stdcall Add(int a, int b)
{
    return a + b;
}

void __stdcall  ShuChu()
{
    unsigned long i = 1;
    unsigned long ulNum = 50000;  //循环5万次
    
    while (ulNum != 0)
    {
        cout <<"The ulNum is: "<< i <<endl ;
        ulNum--;
        i++;
    }
}

4.在项目菜单下修改 Mydll1 属性的配置如下(注意黑体粗体字部分):

5.先把项目编译一遍,得到一个Mydll1.map文件,在这个文件里包括该dll文件成员函数的名字修饰

因为做为初学者甚至是资深专家,都很难搞清楚成员函数名字修饰的规则,所以你必须要靠编译器本身来弄清楚修饰名。

6.编辑MyDll1.def文件为如下内容:

LIBRARY
EXPORTS
   Add = ?Add@@YGHHH@Z 
   ShuChu = ?ShuChu@@YGXXZ    

7.再次编译该项目一次。

这样就完成了一个可供VB.Net调用的Mydll1.DLL文件,把该文件拷贝进你要调用的VB.Net项目下的 \bin\Debug 文件夹下

8. VB.Net控制台项目的代码如下(具体功用不再详述):

 Private Declare Function Add Lib "MyDll1.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
 Private Declare Sub ShuChu Lib "MyDll1.dll" ()

    Sub Main()

        Dim a1 As Integer
        Dim S1 As DateTime, S2 As DateTime
        Dim T1 As TimeSpan, T2 As TimeSpan

        Dim i As Long = 1
        Dim ulNum As Long = 50000
        '============= 调用并计算函数运行时间 ===========================
        S1 = Now
        ShuChu()
        S2 = Now
        T1 = S2.Subtract(S1).Duration

        '============= 用VB实现以上调用函数的相同功能 ====================
        S1 = Now
        While (ulNum <> 0)

            Console.WriteLine("The ulNum is:" & Str(i))
            ulNum -= 1
            i += 1

        End While
        S2 = Now
        T2 = S2.Subtract(S1).Duration

        Console.WriteLine(T1.TotalSeconds.ToString)
        Console.WriteLine(T2.TotalSeconds.ToString)
        '============== 调用DLL 里的Add函数===========================
        a1 = Add(21, 34)
        Console.WriteLine(a1.ToString)

        Console.ReadLine()

    End Sub


9.修改VB.Net项目属性/编译/目标CPU 为x86

10.编译运行成功! 

 通过这段VB.Net程序的运行结果,我们会发现:调用C++函数的运行效率其实并不如VB.Net同样功能的代码运行效率高,这是为什么呢?

posted on 2015-06-09 23:04 李国雄_lgx1972 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lgx1972/p/4564839.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值