1. 程式人生 > >c#調用c++庫函數

c#調用c++庫函數

using boolean 聲明 ice public solution rop n) 要求

如果是非托管的,就用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++庫函數