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 = [email protected]@[email protected]
   ShuChu = [email protected]@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

        ‘===========================================================
        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)
        ‘================================================================
        a1 = Add(21, 34)
        Console.WriteLine(a1.ToString)

        Console.ReadLine()

    End Sub

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

10.编译运行成功!

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

时间: 06-09

Visual C++ 编写供 VB.Net调用的Dll。的相关文章

IronPython脚本调用C#dll示例

上篇Python脚本调用C#代码数据交互示例(hello world)介绍了与C#紧密结合的示例,这里还将提供一个与C#结合更紧密的示例,直接调用C#编写的DLL.      我们还是沿用了上篇文章的代码(其实这里可以直接使用IronPython调试器进行联调了,没有必要再嵌入到C#了) 注意:scriptEngine.AddToPath(Application.StartupPath); 这句代码比较关键,设定dll文件所在的目录. using System; using System.Col

C#创建COM组件供VB,PB,Delphi调用

1  COM组件概述 COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术.在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统. COM组件的优点: ①可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制: ②可以在多个应用系统中重复利用同一个组件: ③可以方便的将应用系统扩展到网络环境下: ④COM组件的特性是与语言无关和与平台无关的(最重要的特性).COM可以被各种不同的语言如Java,C#, P

VB.NET中的DLL编写和调用的最简单示例

DLL(动态链接库)是一个很有用的东西,在开发大项目的时候显得非常重要,因为多人合作开发时,可以给每个人分配一个任务,用DLL完成,最后组合起来,就不会出现互相冲突的问题.这里给出最简单的DLL编写与调用的示例,本人水平不高,各位看官莫笑. 首先,我们打开VB.NET,选择类库,名称改为test然后我们输入以下代码 Public Class test Public Function test(ByVal a As Long, ByVal b As Long) As Long Return a +

VS2015--在 Visual Studio 中调试时映射调用堆栈上的方法

https://msdn.microsoft.com/zh-cn/library/dn194476.aspx 在 Visual Studio 中调试时映射调用堆栈上的方法 创建代码图,以便在调试时对调用堆栈进行可视化跟踪.你可以在图中进行标注以跟踪代码执行的操作,以便专注于查找 Bug. 生成调用堆栈图 1 开始调试.(键盘:"F5") 2 在你的应用进入中断模式或你单步执行某一函数之后,请选择"代码图".(键盘:Ctrl + Shift + `) 当前的调用堆栈在

C#保存登录用户名供其他页面调用

一.保存登录用户名供其他页面调用 步骤: (1)项目自带的Program.cs,类方法里定义登录的用户名为全局变量loginid,这样整个项目都可以调用它 static class Program { public static string loginid = ""; static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);

VB调用VC dll的返回方式

第一种类型:数值传递 注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型变量来配合.VC++部分: [cpp] view plaincopy extern "C" _declspec(dllexport) int __stdcall TestCalc(int source) { //AFX_MANAGE_STATE(AfxGetStaticModuleState()); return(++

用C#基于WCF创建TCP的Service供Client端调用

本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Service1改名为MainService 4): 添加一个Interface来定义Service的契约 4.1):截图如下所示 4.2):IOrderService.cs的代码如下所示 using System; using System.Collections.Generic; using System

Tomcat 配置用户认证服务供C#客户端调用

我美丽又贤惠的老婆大人做大骨头汤去了,今天是六一儿童节,明天是端午节,在这大好的节日,我们也难得的度假一把,大吃大喝一番,感谢我的老婆有这么好的手艺. 今天心情不错,要知道我们在平时的工作日没这么长时间腻歪在一起.现在我把在前段日子做的项目里,遇到的一个小问题来好好的总结一下.因为我们这个项目是用Java写的服务端发布WebService,客户端呢使用C#来调用WebService(本人以前搞过一段时间C#客户端,还总结了一个MVP框架AngelFrame,发布在:http://www.cnbl

2015.5.9 C#编写DLL及C#调用C#DLL

过程比C#调用VC++dll简单. 一.创建DLL 新建工程,类型选择类库,生成的结果就是dll 注意:在项目属性-应用程序中,注意三个地方,程序集名称和默认命名空间可以调整,但要一致,别的程序调用此DLL时,可通过using命名空间,而后类名+函数名调用.输出类型保持默认的"类库"不变. 此DLL中可以应用VC创建的DLL,但此时本DLL属性只能是X86.调用vc++dll方法还是用 [DllImport("space.dll")] public static e