c#調用c++庫函數

來源:互聯網
上載者:User

標籤:執行個體化   add   handle   動態   ext   一個   class   讀取   main   

如果是非託管的,就用DllImport,舉例  
  using System;  
  using System.Runtime.InteropServices;  
  class MainApp  
  [DllImport("Kernel32")] //讀取動態庫檔案  
  public static extern int GetProcAddress(int handle, String funcname);  

  給你講一下我的經驗:  
  首先 你在C#中調用的 是C++ 寫的一個動態庫。比如Kernel32.dll 中的 函數;  
  這個函數用C++寫 有如下要求:  
1、 必須為全域函數  
2、 函數參數 必須為基本類型,也就是C++ 和C#都有的類型,否則你在public static extern int GetProcAddress(int handle, String funcname);  
  這裡沒有辦法聲明。 其餘的 沒什麼了;  


先前用VC寫的程式產生的DLL,C#裡能夠調用嗎?  
可以的話,在VC裡傳入參數為CString,而C#裡是string,怎麼傳參數呢?  

再者就是問,用VC寫的DLL如果是一個匯出類,而不是函數介面,C#裡可以直接調用嗎?  
第一個問題我遇到過, 可用如下方法解決:  

  VC++ 中為: int Set(char** str,int n); //將 String 改成 char** , C# 中沒有與String對應的類型  
  C# 中為: int Set(ref string str,int n);  
   
  VC++ 中的 BOOL 類型對應 C# 中的 System.Int32 類型, 建議改動一下參數類型吧.

第二個問題,產生的DLL裡的函數在一個類裡面,這樣的話在C#裡需要執行個體化那個類嗎?怎麼做  
比如說,類solution裡有函數int getch(int a);  
我怎麼調用這個getch函數??  

建議在C++中另外寫個函數封裝一下, 如:  
  int Dllgetch(int a)  
{  
  solution st = //執行個體化 類solution  
  return st.getch(a);  
}  
這個 Dllgetch(int a) 就可以提取出來供 C# 調用.
你的方法可以,我也解決了  
將CString 改成了LPCTSTR  
BOOL在C#中對應的是Boolean

c#調用c++庫函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.