1. 程式人生 > >Visual C++ 編寫供 VB.Net呼叫的Dll

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
'===========================================================
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同樣功能的程式碼執行效率高,這是為什麼呢?

相關推薦

Visual C++ 編寫 VB.Net呼叫Dll

跟我一樣,很多初學者確實很難編寫出如題的DLL,即使編寫出來也經常在呼叫過程中出現各種問題。我根據摸索寫出了一個DLL,編譯和呼叫程式碼活得通過。 以下舉例簡單說明,具體還有很多問題我也待繼續研究。 1.用Visual C++ 新建一個Win32控制檯 DLL專案(記得打鉤 空專案) 如:MyDll1

vb.net呼叫外部DLL

vb.net呼叫DLL:   申明呼叫:    Declare Auto Function MessageBox Lib "user32.dll" _ (ByVal hWnd As Integer, _ ByVal txt As String, ByVal caption

vb.net 呼叫動態庫dll

'宣告部分 Public Declare Function Encode Lib ".\LDPC_DEC_DLL.dll" _ (ByRef s As Byte, ByRef c As Byte) As Byte Public Declar

C++編寫 動態鏈接庫dll 和 調用dll

.net .html 新建項目 引用 quest c++ dll 遇到 eat 參考:https://jingyan.baidu.com/article/ff42efa92c49cfc19e2202fd.html 和htps://jingyan.baidu.com/a

C++編寫動態庫.so或者.dll的陷阱

一、介面不變就可以不需要重新編譯? 對於很多庫的實現者可能會有這樣的認識“介面不變就可以不需要重新編譯”,其實這句話是有前提的,前提是實現的動態庫有足夠的相容性和魯棒性。尤其是C++實現的動態庫,C++只對語言層規則做了規定,沒有二進位制級別的任何規定。 COM本質論裡面的

vb.net呼叫vc動態庫時傳遞陣列引數應注意的問題

vb.net呼叫vc寫的dll的時候,需要從vb.net傳遞陣列到dll函式,在vc dll中首先malloc了空間,然後將陣列引數指標指向了分配的地址,然後完成了演算法,最後free,結果編譯連結都

VB如何呼叫DLL

  我們知道,在VB中,有一種Byte資料型別。每個Byte型變數佔一個位元組,不含符號位,因此所能表示的範圍為0到255。這種資料型別是專門用於存放二進位制資料的。為了將整個字元串陣列傳進動態庫,可以用位元組陣列來儲存字串。由於Byte是一種簡單資料型別,因此位元組陣列的傳遞是非常簡單的。首先,需要把一個字

利用C#的反射機制動態呼叫DLL類庫

1、使用Assembly類定義和載入程式集,載入在程式集清單中列出模組,以及從此程式集中查詢型別並建立該型別的例項。 2、使用MethodInfo瞭解方法的名稱、返回型別、引數、訪問修飾符(如pulic 或private)和實現詳細資訊(如abstract或virtual)

ApolloStudio高手之路(8):用Python呼叫.NetC#、VB.Net等)開發的動態連結庫(DLL庫檔案)實現相互協作

ApolloStudio是基於.Net與Python雙架構下的實現,這樣的架構體系使得其具有傳統定製軟體無法比擬的超強拓展性,在本文中我們將介紹這兩者是如何在ApolloStudio平臺上實現優勢互補的。由於在ApolloStudio中使用的更易學習的Python作為主導指令碼語言,這裡我們將介

VB.NET中的DLL編寫呼叫的簡單示例

VB.NET中的DLL編寫和呼叫的最簡單示例  DLL(動態連結庫)是一個很有用的東西,在開發大專案的時候顯得非常重要,因為多人合作開發時,可以給每個人分配一個任務,用DLL完成,最後組合起來,就不會出現互相沖突的問題。這裡給出最簡單的DLL編寫與呼叫的示例,本人水平不高

編寫VB呼叫C/C++ DLL

1.建立Win32控制檯應用程式,選擇Dll ,附加選項為空專案。 2.新增mydll.h 、mydll.cpp 、mydll.def三個檔案 3.分別編輯三個檔案。如下 mydll.h中: #include <windows.h> int WINAPI A

VB.net呼叫C\C++ 的DLL

只需要宣告一句話,比如呼叫mfc_Calc.dll中的calc函式 Public Declare Function calc Lib "mfc_Calc" (ByValaAs Integer, ByV

c#編寫dll 其他語言呼叫問題

前段時間一個停車場監控的專案中,公司需要在vb 的程式集呼叫一個外部dll,於是編寫了一個dameo 介入後發現無法呼叫,後來查閱資料發現c#的dll不是變準dll,是基於程式集託管(基於.net framework)的的程式碼,而其他語言 比如c是非程式及託管的dll

C#呼叫C++編寫DLL函式引數傳遞

                        &nb

C#動態呼叫C++編寫DLL函式

C#動態呼叫C++編寫的DLL函式 動態載入DLL需要使用Windows API函式:LoadLibrary、GetProcAddress以及FreeLibrary。我們可以使用DllImport在C#中使用這三個函式。 [DllImport(“Kernel32”)] publ

[轉]在C#中呼叫C語言函式(靜態呼叫Native DLL,Windows & Microsoft.Net平臺)

原文:https://blog.csdn.net/yapingxin/article/details/7288325   對於不太瞭解.Net的人,如果想要了解.Net,我必須給他介紹P/Invoke。P/Invoke是什麼呢?簡單地說,就是在.Net中呼叫原生代碼(Native code)的一

C#呼叫C++編寫DLL函式各種引數傳遞問題

[System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously   [DllImport("User32.dll", CharSet=CharSet.Auto)]   public static extern

C#生成com元件形式的dllC++呼叫

①建立C#類庫(ClassLibrary)、設定AssemblyInfo.cs中的[assembly: ComVisible(true)]預設是false、或者在介面和類之前新增設定為true     [ComVisible(true)]     [Guid("E709D3

如何正確的在VBA/VB中引用C#/VB.NET開發的DLL

原文地址:http://www.geeksengine.com/article/reference-dll.html感謝原作者的文章。 如果需要使用在C#或VB.Net建立一個DLL在Access VBA時,Excel VBA,或用於生產的機器上VB6應用程式,本文向您介紹

C#.NET如何將cs檔案編譯成dll檔案 exe檔案 如何呼叫dll檔案

比如我要把TestDLL.cs檔案編譯成dll檔案,則在命令提示符下,輸入下面的命令,生成的檔案為TestDLL.dll csc /target:library TestDLL.cs 注意前提是你安裝了.NET Framework並把csc.exe加入了環境變數(參考我的另一