C#如何靜態調用C++中的方法(靜態調用dll)


 當我們想要在C#中使用C++項目的方法時,這個時候就可以通過調用C++項目的dll來實現,它有靜態和動態調用兩種方法。

  DLL(Dynamic Link Library)文件為動態鏈接庫文件,又稱“應用程序拓展”,是軟件文件類型。在Windows中,許多應用程序並不是一個完整的可執行文件,它們被分割成一些相對獨立的動態鏈接庫,即DLL文件,放置於系統中。當我們執行某一個程序時,相應的DLL文件就會被調用。一個應用程序可使用多個DLL文件,一個DLL文件也可能被不同的應用程序使用,這樣的DLL文件被稱為共享DLL文件。[1] (百度百科)

  我們在C++項目中寫了如下的一個方法:

  

那么只需將C++項目下Debug中的dll文件復制到我們C#的bin\Debug\文件夾下即可。

然后就是在代碼中調用它。

注意:

添加屬性:CallingConvention=CallingConvention.Cdecl

主要是處理

 在使用托管代碼調用非托管代碼時,發生“對 PInvoke 函數“UseTwiHikVisionDllTest!UseTwiHikVisionDllTest.TwiHikVision::GetFirstPic”的調用導致堆棧不對稱。原因可能是托管的 PInvoke 簽名與非托管的目標簽名不匹配。請檢查 PInvoke 簽名的調用約定和參數與非托管的目標簽名是否匹配。”

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CSharp調用靜態的dll
{

    public partial class Form1 : Form
    {
        [DllImport("TestDll01.dll", CallingConvention = CallingConvention.Cdecl)]
        private extern static int testCount(int a, int b);
        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show(testCount(12, 14).ToString());
        }
    }
}

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM