標籤:執行個體化 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++庫函數