c# 無法加載DLL“###.dll”,: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)的解決辦法
如果是非托管的,就用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);
URL:http://www.bianceng.cn/Programming/csharp/201410/45771.htm
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
****************************上段摘自jingshuaizh回復提問者的答案,講得很詳細**********************
還有你可以參考這裡:http://blog.csdn.net/jingshuaizh/archive/2009/02/04/3862019.aspx
DLL文件放置位置:
(1)項目文件夾下的../bin/Debug/
(2)系統文件夾下的C:/WINDOWS/system32
如果能確定位置是正確的,那麼就得看看是不是你調用的DLL文件是不是使用到其他DLL文件裡的內容,這點很關鍵,在找不到其他問題的情況下這種情況的可能性高過百分之九十,這只是我遇到的情況,要是有其他情況,可以發來一起討論。